Merge pull request #1865 from arne-bdt/jena_issue_1279

Jena issue 1279
diff --git a/.github/pull_request_template.md b/.github/pull_request_template.md
index 3480a7e..f4096ed 100644
--- a/.github/pull_request_template.md
+++ b/.github/pull_request_template.md
@@ -9,7 +9,7 @@
  - [ ] Tests are included.
  - [ ] Documentation change and updates are provided for the [Apache Jena website](https://github.com/apache/jena-site/)
  - [ ] Commits have been squashed to remove intermediate development commit messages.
- - [ ] Key commit messages start with the issue number (GH-xxxx or JENA-xxxx)
+ - [ ] Key commit messages start with the issue number (GH-xxxx, or if in JIRA, JENA-xxxx)
 
 By submitting this pull request, I acknowledge that I am making a contribution to the Apache Software Foundation under the terms and conditions of the [Contributor's Agreement](https://www.apache.org/licenses/contributor-agreements.html).
 
diff --git a/apache-jena/bat/arq.bat b/apache-jena/bat/arq.bat
index 2e7ae30..c877acb 100644
--- a/apache-jena/bat/arq.bat
+++ b/apache-jena/bat/arq.bat
@@ -13,6 +13,10 @@
 set JENA_CP=%JENA_HOME%\lib\*;

 set LOGGING=file:%JENA_HOME%/log4j2.properties

 

+if "%CLASSPATH%" == "" goto :noExtra

+set JENA_CP="%JENA_CP%:%CLASSPATH%"

+:noExtra

+

 @rem JVM_ARGS comes from the environment.

 java %JVM_ARGS% -Dlog4j.configurationFile="%LOGGING%" -cp "%JENA_CP%" arq.arq %*

 exit /B

diff --git a/apache-jena/bat/infer.bat b/apache-jena/bat/infer.bat
index b6a9662..d6cd20c 100644
--- a/apache-jena/bat/infer.bat
+++ b/apache-jena/bat/infer.bat
@@ -13,6 +13,10 @@
 set JENA_CP=%JENA_HOME%\lib\*;

 set LOGGING=file:%JENA_HOME%/log4j2.properties

 

+if "%CLASSPATH%" == "" goto :noExtra

+set JENA_CP="%JENA_CP%:%CLASSPATH%"

+:noExtra

+

 @rem JVM_ARGS comes from the environment.

 java %JVM_ARGS% -Dlog4j.configurationFile="%LOGGING%" -cp "%JENA_CP%" riotcmd.infer %*

 exit /B

diff --git a/apache-jena/bat/iri.bat b/apache-jena/bat/iri.bat
index 6cd8983..4e17afb 100644
--- a/apache-jena/bat/iri.bat
+++ b/apache-jena/bat/iri.bat
@@ -13,6 +13,10 @@
 set JENA_CP=%JENA_HOME%\lib\*;

 set LOGGING=file:%JENA_HOME%/log4j2.properties

 

+if "%CLASSPATH%" == "" goto :noExtra

+set JENA_CP="%JENA_CP%:%CLASSPATH%"

+:noExtra

+

 @rem JVM_ARGS comes from the environment.

 java %JVM_ARGS% -Dlog4j.configurationFile="%LOGGING%" -cp "%JENA_CP%" arq.iri %*

 exit /B

diff --git a/apache-jena/bat/jena_version.bat b/apache-jena/bat/jena_version.bat
index bf26e96..e9aaec9 100644
--- a/apache-jena/bat/jena_version.bat
+++ b/apache-jena/bat/jena_version.bat
@@ -13,6 +13,10 @@
 set JENA_CP=%JENA_HOME%\lib\*;

 set LOGGING=file:%JENA_HOME%/log4j2.properties

 

+if "%CLASSPATH%" == "" goto :noExtra

+set JENA_CP="%JENA_CP%:%CLASSPATH%"

+:noExtra

+

 @rem JVM_ARGS comes from the environment.

 java %JVM_ARGS% -Dlog4j.configurationFile="%LOGGING%" -cp "%JENA_CP%" jena.version %*

 exit /B

diff --git a/apache-jena/bat/juuid.bat b/apache-jena/bat/juuid.bat
index cc5be2a..9e0b28f 100644
--- a/apache-jena/bat/juuid.bat
+++ b/apache-jena/bat/juuid.bat
@@ -13,6 +13,10 @@
 set JENA_CP=%JENA_HOME%\lib\*;

 set LOGGING=file:%JENA_HOME%/log4j2.properties

 

+if "%CLASSPATH%" == "" goto :noExtra

+set JENA_CP="%JENA_CP%:%CLASSPATH%"

+:noExtra

+

 @rem JVM_ARGS comes from the environment.

 java %JVM_ARGS% -Dlog4j.configurationFile="%LOGGING%" -cp "%JENA_CP%" arq.juuid %*

 exit /B

diff --git a/apache-jena/bat/nquads.bat b/apache-jena/bat/nquads.bat
index f1a66d1..7594026 100644
--- a/apache-jena/bat/nquads.bat
+++ b/apache-jena/bat/nquads.bat
@@ -13,6 +13,10 @@
 set JENA_CP=%JENA_HOME%\lib\*;

 set LOGGING=file:%JENA_HOME%/log4j2.properties

 

+if "%CLASSPATH%" == "" goto :noExtra

+set JENA_CP="%JENA_CP%:%CLASSPATH%"

+:noExtra

+

 @rem JVM_ARGS comes from the environment.

 java %JVM_ARGS% -Dlog4j.configurationFile="%LOGGING%" -cp "%JENA_CP%" riotcmd.nquads %*

 exit /B

diff --git a/apache-jena/bat/ntriples.bat b/apache-jena/bat/ntriples.bat
index eaa9b42..2934782 100644
--- a/apache-jena/bat/ntriples.bat
+++ b/apache-jena/bat/ntriples.bat
@@ -13,6 +13,10 @@
 set JENA_CP=%JENA_HOME%\lib\*;

 set LOGGING=file:%JENA_HOME%/log4j2.properties

 

+if "%CLASSPATH%" == "" goto :noExtra

+set JENA_CP="%JENA_CP%:%CLASSPATH%"

+:noExtra

+

 @rem JVM_ARGS comes from the environment.

 java %JVM_ARGS% -Dlog4j.configurationFile="%LOGGING%" -cp "%JENA_CP%" riotcmd.ntriples %*

 exit /B

diff --git a/apache-jena/bat/qparse.bat b/apache-jena/bat/qparse.bat
index 19f080b..687d982 100644
--- a/apache-jena/bat/qparse.bat
+++ b/apache-jena/bat/qparse.bat
@@ -13,6 +13,10 @@
 set JENA_CP=%JENA_HOME%\lib\*;

 set LOGGING=file:%JENA_HOME%/log4j2.properties

 

+if "%CLASSPATH%" == "" goto :noExtra

+set JENA_CP="%JENA_CP%:%CLASSPATH%"

+:noExtra

+

 @rem JVM_ARGS comes from the environment.

 java %JVM_ARGS% -Dlog4j.configurationFile="%LOGGING%" -cp "%JENA_CP%" arq.qparse %*

 exit /B

diff --git a/apache-jena/bat/rdfcat.bat b/apache-jena/bat/rdfcat.bat
index 1861b25..5ae5904 100644
--- a/apache-jena/bat/rdfcat.bat
+++ b/apache-jena/bat/rdfcat.bat
@@ -13,6 +13,10 @@
 set JENA_CP=%JENA_HOME%\lib\*;

 set LOGGING=file:%JENA_HOME%/log4j2.properties

 

+if "%CLASSPATH%" == "" goto :noExtra

+set JENA_CP="%JENA_CP%:%CLASSPATH%"

+:noExtra

+

 @rem JVM_ARGS comes from the environment.

 java %JVM_ARGS% -Dlog4j.configurationFile="%LOGGING%" -cp "%JENA_CP%" jena.rdfcat %*

 exit /B

diff --git a/apache-jena/bat/rdfcompare.bat b/apache-jena/bat/rdfcompare.bat
index 9e28ce3..8f4150e 100644
--- a/apache-jena/bat/rdfcompare.bat
+++ b/apache-jena/bat/rdfcompare.bat
@@ -13,6 +13,10 @@
 set JENA_CP=%JENA_HOME%\lib\*;

 set LOGGING=file:%JENA_HOME%/log4j2.properties

 

+if "%CLASSPATH%" == "" goto :noExtra

+set JENA_CP="%JENA_CP%:%CLASSPATH%"

+:noExtra

+

 @rem JVM_ARGS comes from the environment.

 java %JVM_ARGS% -Dlog4j.configurationFile="%LOGGING%" -cp "%JENA_CP%" jena.rdfcompare %*

 exit /B

diff --git a/apache-jena/bat/rdfcopy.bat b/apache-jena/bat/rdfcopy.bat
index c9344b0..dbe766e 100644
--- a/apache-jena/bat/rdfcopy.bat
+++ b/apache-jena/bat/rdfcopy.bat
@@ -13,6 +13,10 @@
 set JENA_CP=%JENA_HOME%\lib\*;

 set LOGGING=file:%JENA_HOME%/log4j2.properties

 

+if "%CLASSPATH%" == "" goto :noExtra

+set JENA_CP="%JENA_CP%:%CLASSPATH%"

+:noExtra

+

 @rem JVM_ARGS comes from the environment.

 java %JVM_ARGS% -Dlog4j.configurationFile="%LOGGING%" -cp "%JENA_CP%" jena.rdfcopy %*

 exit /B

diff --git a/apache-jena/bat/rdfdiff.bat b/apache-jena/bat/rdfdiff.bat
index 0dcff01..524e66d 100644
--- a/apache-jena/bat/rdfdiff.bat
+++ b/apache-jena/bat/rdfdiff.bat
@@ -13,6 +13,10 @@
 set JENA_CP=%JENA_HOME%\lib\*;

 set LOGGING=file:%JENA_HOME%/log4j2.properties

 

+if "%CLASSPATH%" == "" goto :noExtra

+set JENA_CP="%JENA_CP%:%CLASSPATH%"

+:noExtra

+

 @rem JVM_ARGS comes from the environment.

 java %JVM_ARGS% -Dlog4j.configurationFile="%LOGGING%" -cp "%JENA_CP%" arq.rdfdiff %*

 exit /B

diff --git a/apache-jena/bat/rdfparse.bat b/apache-jena/bat/rdfparse.bat
index 43721df..f31ae47 100644
--- a/apache-jena/bat/rdfparse.bat
+++ b/apache-jena/bat/rdfparse.bat
@@ -13,6 +13,10 @@
 set JENA_CP=%JENA_HOME%\lib\*;

 set LOGGING=file:%JENA_HOME%/log4j2.properties

 

+if "%CLASSPATH%" == "" goto :noExtra

+set JENA_CP="%JENA_CP%:%CLASSPATH%"

+:noExtra

+

 @rem JVM_ARGS comes from the environment.

 java %JVM_ARGS% -Dlog4j.configurationFile="%LOGGING%" -cp "%JENA_CP%" jena.rdfparse %*

 exit /B

diff --git a/apache-jena/bat/rdfpatch.bat b/apache-jena/bat/rdfpatch.bat
index 4de5973..81b0cc7 100644
--- a/apache-jena/bat/rdfpatch.bat
+++ b/apache-jena/bat/rdfpatch.bat
@@ -13,6 +13,10 @@
 set JENA_CP=%JENA_HOME%\lib\*;

 set LOGGING=file:%JENA_HOME%/log4j2.properties

 

+if "%CLASSPATH%" == "" goto :noExtra

+set JENA_CP="%JENA_CP%:%CLASSPATH%"

+:noExtra

+

 @rem JVM_ARGS comes from the environment.

 java %JVM_ARGS% -Dlog4j.configurationFile="%LOGGING%" -cp "%JENA_CP%" rdfpatch.rdfpatch %*

 exit /B

diff --git a/apache-jena/bat/rdfxml.bat b/apache-jena/bat/rdfxml.bat
index 268b7d9..718251b 100644
--- a/apache-jena/bat/rdfxml.bat
+++ b/apache-jena/bat/rdfxml.bat
@@ -13,6 +13,10 @@
 set JENA_CP=%JENA_HOME%\lib\*;

 set LOGGING=file:%JENA_HOME%/log4j2.properties

 

+if "%CLASSPATH%" == "" goto :noExtra

+set JENA_CP="%JENA_CP%:%CLASSPATH%"

+:noExtra

+

 @rem JVM_ARGS comes from the environment.

 java %JVM_ARGS% -Dlog4j.configurationFile="%LOGGING%" -cp "%JENA_CP%" riotcmd.rdfxml %*

 exit /B

diff --git a/apache-jena/bat/riot.bat b/apache-jena/bat/riot.bat
index 63f4332..d4d5e31 100644
--- a/apache-jena/bat/riot.bat
+++ b/apache-jena/bat/riot.bat
@@ -13,6 +13,10 @@
 set JENA_CP=%JENA_HOME%\lib\*;

 set LOGGING=file:%JENA_HOME%/log4j2.properties

 

+if "%CLASSPATH%" == "" goto :noExtra

+set JENA_CP="%JENA_CP%:%CLASSPATH%"

+:noExtra

+

 @rem JVM_ARGS comes from the environment.

 java %JVM_ARGS% -Dlog4j.configurationFile="%LOGGING%" -cp "%JENA_CP%" riotcmd.riot %*

 exit /B

diff --git a/apache-jena/bat/rset.bat b/apache-jena/bat/rset.bat
index b47515a..e03a1fc 100644
--- a/apache-jena/bat/rset.bat
+++ b/apache-jena/bat/rset.bat
@@ -13,6 +13,10 @@
 set JENA_CP=%JENA_HOME%\lib\*;

 set LOGGING=file:%JENA_HOME%/log4j2.properties

 

+if "%CLASSPATH%" == "" goto :noExtra

+set JENA_CP="%JENA_CP%:%CLASSPATH%"

+:noExtra

+

 @rem JVM_ARGS comes from the environment.

 java %JVM_ARGS% -Dlog4j.configurationFile="%LOGGING%" -cp "%JENA_CP%" arq.rset %*

 exit /B

diff --git a/apache-jena/bat/rsparql.bat b/apache-jena/bat/rsparql.bat
index c359713..767afb5 100644
--- a/apache-jena/bat/rsparql.bat
+++ b/apache-jena/bat/rsparql.bat
@@ -13,6 +13,10 @@
 set JENA_CP=%JENA_HOME%\lib\*;

 set LOGGING=file:%JENA_HOME%/log4j2.properties

 

+if "%CLASSPATH%" == "" goto :noExtra

+set JENA_CP="%JENA_CP%:%CLASSPATH%"

+:noExtra

+

 @rem JVM_ARGS comes from the environment.

 java %JVM_ARGS% -Dlog4j.configurationFile="%LOGGING%" -cp "%JENA_CP%" arq.rsparql %*

 exit /B

diff --git a/apache-jena/bat/rupdate.bat b/apache-jena/bat/rupdate.bat
index b4696a5..aa01829 100644
--- a/apache-jena/bat/rupdate.bat
+++ b/apache-jena/bat/rupdate.bat
@@ -13,6 +13,10 @@
 set JENA_CP=%JENA_HOME%\lib\*;

 set LOGGING=file:%JENA_HOME%/log4j2.properties

 

+if "%CLASSPATH%" == "" goto :noExtra

+set JENA_CP="%JENA_CP%:%CLASSPATH%"

+:noExtra

+

 @rem JVM_ARGS comes from the environment.

 java %JVM_ARGS% -Dlog4j.configurationFile="%LOGGING%" -cp "%JENA_CP%" arq.rupdate %*

 exit /B

diff --git a/apache-jena/bat/schemagen.bat b/apache-jena/bat/schemagen.bat
index ef4218f..57d3001 100644
--- a/apache-jena/bat/schemagen.bat
+++ b/apache-jena/bat/schemagen.bat
@@ -13,6 +13,10 @@
 set JENA_CP=%JENA_HOME%\lib\*;

 set LOGGING=file:%JENA_HOME%/log4j2.properties

 

+if "%CLASSPATH%" == "" goto :noExtra

+set JENA_CP="%JENA_CP%:%CLASSPATH%"

+:noExtra

+

 @rem JVM_ARGS comes from the environment.

 java %JVM_ARGS% -Dlog4j.configurationFile="%LOGGING%" -cp "%JENA_CP%" jena.schemagen %*

 exit /B

diff --git a/apache-jena/bat/shacl.bat b/apache-jena/bat/shacl.bat
index 47db997..51fccc4 100644
--- a/apache-jena/bat/shacl.bat
+++ b/apache-jena/bat/shacl.bat
@@ -13,6 +13,10 @@
 set JENA_CP=%JENA_HOME%\lib\*;

 set LOGGING=file:%JENA_HOME%/log4j2.properties

 

+if "%CLASSPATH%" == "" goto :noExtra

+set JENA_CP="%JENA_CP%:%CLASSPATH%"

+:noExtra

+

 @rem JVM_ARGS comes from the environment.

 java %JVM_ARGS% -Dlog4j.configurationFile="%LOGGING%" -cp "%JENA_CP%" shacl.shacl %*

 exit /B

diff --git a/apache-jena/bat/shex.bat b/apache-jena/bat/shex.bat
index 3c7d6e6..6942fec 100644
--- a/apache-jena/bat/shex.bat
+++ b/apache-jena/bat/shex.bat
@@ -13,6 +13,10 @@
 set JENA_CP=%JENA_HOME%\lib\*;

 set LOGGING=file:%JENA_HOME%/log4j2.properties

 

+if "%CLASSPATH%" == "" goto :noExtra

+set JENA_CP="%JENA_CP%:%CLASSPATH%"

+:noExtra

+

 @rem JVM_ARGS comes from the environment.

 java %JVM_ARGS% -Dlog4j.configurationFile="%LOGGING%" -cp "%JENA_CP%" shex.shex %*

 exit /B

diff --git a/apache-jena/bat/sparql.bat b/apache-jena/bat/sparql.bat
index a029984..914211d 100644
--- a/apache-jena/bat/sparql.bat
+++ b/apache-jena/bat/sparql.bat
@@ -13,6 +13,10 @@
 set JENA_CP=%JENA_HOME%\lib\*;

 set LOGGING=file:%JENA_HOME%/log4j2.properties

 

+if "%CLASSPATH%" == "" goto :noExtra

+set JENA_CP="%JENA_CP%:%CLASSPATH%"

+:noExtra

+

 @rem JVM_ARGS comes from the environment.

 java %JVM_ARGS% -Dlog4j.configurationFile="%LOGGING%" -cp "%JENA_CP%" arq.sparql %*

 exit /B

diff --git a/apache-jena/bat/tdb2_tdbbackup.bat b/apache-jena/bat/tdb2_tdbbackup.bat
index 7177167..c0d9c00 100644
--- a/apache-jena/bat/tdb2_tdbbackup.bat
+++ b/apache-jena/bat/tdb2_tdbbackup.bat
@@ -13,6 +13,10 @@
 set JENA_CP=%JENA_HOME%\lib\*;

 set LOGGING=file:%JENA_HOME%/log4j2.properties

 

+if "%CLASSPATH%" == "" goto :noExtra

+set JENA_CP="%JENA_CP%:%CLASSPATH%"

+:noExtra

+

 @rem JVM_ARGS comes from the environment.

 java %JVM_ARGS% -Dlog4j.configurationFile="%LOGGING%" -cp "%JENA_CP%" tdb2.tdbbackup %*

 exit /B

diff --git a/apache-jena/bat/tdb2_tdbcompact.bat b/apache-jena/bat/tdb2_tdbcompact.bat
index 7beb076..e19a61a 100644
--- a/apache-jena/bat/tdb2_tdbcompact.bat
+++ b/apache-jena/bat/tdb2_tdbcompact.bat
@@ -13,6 +13,10 @@
 set JENA_CP=%JENA_HOME%\lib\*;

 set LOGGING=file:%JENA_HOME%/log4j2.properties

 

+if "%CLASSPATH%" == "" goto :noExtra

+set JENA_CP="%JENA_CP%:%CLASSPATH%"

+:noExtra

+

 @rem JVM_ARGS comes from the environment.

 java %JVM_ARGS% -Dlog4j.configurationFile="%LOGGING%" -cp "%JENA_CP%" tdb2.tdbcompact %*

 exit /B

diff --git a/apache-jena/bat/tdb2_tdbdump.bat b/apache-jena/bat/tdb2_tdbdump.bat
index 70127e8..bc97607 100644
--- a/apache-jena/bat/tdb2_tdbdump.bat
+++ b/apache-jena/bat/tdb2_tdbdump.bat
@@ -13,6 +13,10 @@
 set JENA_CP=%JENA_HOME%\lib\*;

 set LOGGING=file:%JENA_HOME%/log4j2.properties

 

+if "%CLASSPATH%" == "" goto :noExtra

+set JENA_CP="%JENA_CP%:%CLASSPATH%"

+:noExtra

+

 @rem JVM_ARGS comes from the environment.

 java %JVM_ARGS% -Dlog4j.configurationFile="%LOGGING%" -cp "%JENA_CP%" tdb2.tdbdump %*

 exit /B

diff --git a/apache-jena/bat/tdb2_tdbloader.bat b/apache-jena/bat/tdb2_tdbloader.bat
index 7371004..6de9425 100644
--- a/apache-jena/bat/tdb2_tdbloader.bat
+++ b/apache-jena/bat/tdb2_tdbloader.bat
@@ -13,6 +13,10 @@
 set JENA_CP=%JENA_HOME%\lib\*;

 set LOGGING=file:%JENA_HOME%/log4j2.properties

 

+if "%CLASSPATH%" == "" goto :noExtra

+set JENA_CP="%JENA_CP%:%CLASSPATH%"

+:noExtra

+

 @rem JVM_ARGS comes from the environment.

 java %JVM_ARGS% -Dlog4j.configurationFile="%LOGGING%" -cp "%JENA_CP%" tdb2.tdbloader %*

 exit /B

diff --git a/apache-jena/bat/tdb2_tdbquery.bat b/apache-jena/bat/tdb2_tdbquery.bat
index 40ca010..02aa421 100644
--- a/apache-jena/bat/tdb2_tdbquery.bat
+++ b/apache-jena/bat/tdb2_tdbquery.bat
@@ -13,6 +13,10 @@
 set JENA_CP=%JENA_HOME%\lib\*;

 set LOGGING=file:%JENA_HOME%/log4j2.properties

 

+if "%CLASSPATH%" == "" goto :noExtra

+set JENA_CP="%JENA_CP%:%CLASSPATH%"

+:noExtra

+

 @rem JVM_ARGS comes from the environment.

 java %JVM_ARGS% -Dlog4j.configurationFile="%LOGGING%" -cp "%JENA_CP%" tdb2.tdbquery %*

 exit /B

diff --git a/apache-jena/bat/tdb2_tdbstats.bat b/apache-jena/bat/tdb2_tdbstats.bat
index bd5691e..41dfdf2 100644
--- a/apache-jena/bat/tdb2_tdbstats.bat
+++ b/apache-jena/bat/tdb2_tdbstats.bat
@@ -13,6 +13,10 @@
 set JENA_CP=%JENA_HOME%\lib\*;

 set LOGGING=file:%JENA_HOME%/log4j2.properties

 

+if "%CLASSPATH%" == "" goto :noExtra

+set JENA_CP="%JENA_CP%:%CLASSPATH%"

+:noExtra

+

 @rem JVM_ARGS comes from the environment.

 java %JVM_ARGS% -Dlog4j.configurationFile="%LOGGING%" -cp "%JENA_CP%" tdb2.tdbstats %*

 exit /B

diff --git a/apache-jena/bat/tdb2_tdbupdate.bat b/apache-jena/bat/tdb2_tdbupdate.bat
index cf6bb60..e65dc2c 100644
--- a/apache-jena/bat/tdb2_tdbupdate.bat
+++ b/apache-jena/bat/tdb2_tdbupdate.bat
@@ -13,6 +13,10 @@
 set JENA_CP=%JENA_HOME%\lib\*;

 set LOGGING=file:%JENA_HOME%/log4j2.properties

 

+if "%CLASSPATH%" == "" goto :noExtra

+set JENA_CP="%JENA_CP%:%CLASSPATH%"

+:noExtra

+

 @rem JVM_ARGS comes from the environment.

 java %JVM_ARGS% -Dlog4j.configurationFile="%LOGGING%" -cp "%JENA_CP%" tdb2.tdbupdate %*

 exit /B

diff --git a/apache-jena/bat/tdbbackup.bat b/apache-jena/bat/tdbbackup.bat
index 5826424..8ca8102 100644
--- a/apache-jena/bat/tdbbackup.bat
+++ b/apache-jena/bat/tdbbackup.bat
@@ -13,6 +13,10 @@
 set JENA_CP=%JENA_HOME%\lib\*;

 set LOGGING=file:%JENA_HOME%/log4j2.properties

 

+if "%CLASSPATH%" == "" goto :noExtra

+set JENA_CP="%JENA_CP%:%CLASSPATH%"

+:noExtra

+

 @rem JVM_ARGS comes from the environment.

 java %JVM_ARGS% -Dlog4j.configurationFile="%LOGGING%" -cp "%JENA_CP%" tdb.tdbbackup %*

 exit /B

diff --git a/apache-jena/bat/tdbdump.bat b/apache-jena/bat/tdbdump.bat
index 13ad8b1..926df26 100644
--- a/apache-jena/bat/tdbdump.bat
+++ b/apache-jena/bat/tdbdump.bat
@@ -13,6 +13,10 @@
 set JENA_CP=%JENA_HOME%\lib\*;

 set LOGGING=file:%JENA_HOME%/log4j2.properties

 

+if "%CLASSPATH%" == "" goto :noExtra

+set JENA_CP="%JENA_CP%:%CLASSPATH%"

+:noExtra

+

 @rem JVM_ARGS comes from the environment.

 java %JVM_ARGS% -Dlog4j.configurationFile="%LOGGING%" -cp "%JENA_CP%" tdb.tdbdump %*

 exit /B

diff --git a/apache-jena/bat/tdbloader.bat b/apache-jena/bat/tdbloader.bat
index 122d883..c3666e1 100644
--- a/apache-jena/bat/tdbloader.bat
+++ b/apache-jena/bat/tdbloader.bat
@@ -13,6 +13,10 @@
 set JENA_CP=%JENA_HOME%\lib\*;

 set LOGGING=file:%JENA_HOME%/log4j2.properties

 

+if "%CLASSPATH%" == "" goto :noExtra

+set JENA_CP="%JENA_CP%:%CLASSPATH%"

+:noExtra

+

 @rem JVM_ARGS comes from the environment.

 java %JVM_ARGS% -Dlog4j.configurationFile="%LOGGING%" -cp "%JENA_CP%" tdb.tdbloader %*

 exit /B

diff --git a/apache-jena/bat/tdbquery.bat b/apache-jena/bat/tdbquery.bat
index c3782c0..4152c43 100644
--- a/apache-jena/bat/tdbquery.bat
+++ b/apache-jena/bat/tdbquery.bat
@@ -13,6 +13,10 @@
 set JENA_CP=%JENA_HOME%\lib\*;

 set LOGGING=file:%JENA_HOME%/log4j2.properties

 

+if "%CLASSPATH%" == "" goto :noExtra

+set JENA_CP="%JENA_CP%:%CLASSPATH%"

+:noExtra

+

 @rem JVM_ARGS comes from the environment.

 java %JVM_ARGS% -Dlog4j.configurationFile="%LOGGING%" -cp "%JENA_CP%" tdb.tdbquery %*

 exit /B

diff --git a/apache-jena/bat/tdbstats.bat b/apache-jena/bat/tdbstats.bat
index 50e6658..9c4270f 100644
--- a/apache-jena/bat/tdbstats.bat
+++ b/apache-jena/bat/tdbstats.bat
@@ -13,6 +13,10 @@
 set JENA_CP=%JENA_HOME%\lib\*;

 set LOGGING=file:%JENA_HOME%/log4j2.properties

 

+if "%CLASSPATH%" == "" goto :noExtra

+set JENA_CP="%JENA_CP%:%CLASSPATH%"

+:noExtra

+

 @rem JVM_ARGS comes from the environment.

 java %JVM_ARGS% -Dlog4j.configurationFile="%LOGGING%" -cp "%JENA_CP%" tdb.tdbstats %*

 exit /B

diff --git a/apache-jena/bat/tdbupdate.bat b/apache-jena/bat/tdbupdate.bat
index 5a585de..938a63d 100644
--- a/apache-jena/bat/tdbupdate.bat
+++ b/apache-jena/bat/tdbupdate.bat
@@ -13,6 +13,10 @@
 set JENA_CP=%JENA_HOME%\lib\*;

 set LOGGING=file:%JENA_HOME%/log4j2.properties

 

+if "%CLASSPATH%" == "" goto :noExtra

+set JENA_CP="%JENA_CP%:%CLASSPATH%"

+:noExtra

+

 @rem JVM_ARGS comes from the environment.

 java %JVM_ARGS% -Dlog4j.configurationFile="%LOGGING%" -cp "%JENA_CP%" tdb.tdbupdate %*

 exit /B

diff --git a/apache-jena/bat/trig.bat b/apache-jena/bat/trig.bat
index 09595f9..c108776 100644
--- a/apache-jena/bat/trig.bat
+++ b/apache-jena/bat/trig.bat
@@ -13,6 +13,10 @@
 set JENA_CP=%JENA_HOME%\lib\*;

 set LOGGING=file:%JENA_HOME%/log4j2.properties

 

+if "%CLASSPATH%" == "" goto :noExtra

+set JENA_CP="%JENA_CP%:%CLASSPATH%"

+:noExtra

+

 @rem JVM_ARGS comes from the environment.

 java %JVM_ARGS% -Dlog4j.configurationFile="%LOGGING%" -cp "%JENA_CP%" riotcmd.trig %*

 exit /B

diff --git a/apache-jena/bat/turtle.bat b/apache-jena/bat/turtle.bat
index 8440cb8..045e74c 100644
--- a/apache-jena/bat/turtle.bat
+++ b/apache-jena/bat/turtle.bat
@@ -13,6 +13,10 @@
 set JENA_CP=%JENA_HOME%\lib\*;

 set LOGGING=file:%JENA_HOME%/log4j2.properties

 

+if "%CLASSPATH%" == "" goto :noExtra

+set JENA_CP="%JENA_CP%:%CLASSPATH%"

+:noExtra

+

 @rem JVM_ARGS comes from the environment.

 java %JVM_ARGS% -Dlog4j.configurationFile="%LOGGING%" -cp "%JENA_CP%" riotcmd.turtle %*

 exit /B

diff --git a/apache-jena/bat/uparse.bat b/apache-jena/bat/uparse.bat
index e3c6fcd..4845335 100644
--- a/apache-jena/bat/uparse.bat
+++ b/apache-jena/bat/uparse.bat
@@ -13,6 +13,10 @@
 set JENA_CP=%JENA_HOME%\lib\*;

 set LOGGING=file:%JENA_HOME%/log4j2.properties

 

+if "%CLASSPATH%" == "" goto :noExtra

+set JENA_CP="%JENA_CP%:%CLASSPATH%"

+:noExtra

+

 @rem JVM_ARGS comes from the environment.

 java %JVM_ARGS% -Dlog4j.configurationFile="%LOGGING%" -cp "%JENA_CP%" arq.uparse %*

 exit /B

diff --git a/apache-jena/bat/update.bat b/apache-jena/bat/update.bat
index 175a400..68eb4ca 100644
--- a/apache-jena/bat/update.bat
+++ b/apache-jena/bat/update.bat
@@ -13,6 +13,10 @@
 set JENA_CP=%JENA_HOME%\lib\*;

 set LOGGING=file:%JENA_HOME%/log4j2.properties

 

+if "%CLASSPATH%" == "" goto :noExtra

+set JENA_CP="%JENA_CP%:%CLASSPATH%"

+:noExtra

+

 @rem JVM_ARGS comes from the environment.

 java %JVM_ARGS% -Dlog4j.configurationFile="%LOGGING%" -cp "%JENA_CP%" arq.update %*

 exit /B

diff --git a/apache-jena/bat/utf8.bat b/apache-jena/bat/utf8.bat
index 4b27142..480caf6 100644
--- a/apache-jena/bat/utf8.bat
+++ b/apache-jena/bat/utf8.bat
@@ -13,6 +13,10 @@
 set JENA_CP=%JENA_HOME%\lib\*;

 set LOGGING=file:%JENA_HOME%/log4j2.properties

 

+if "%CLASSPATH%" == "" goto :noExtra

+set JENA_CP="%JENA_CP%:%CLASSPATH%"

+:noExtra

+

 @rem JVM_ARGS comes from the environment.

 java %JVM_ARGS% -Dlog4j.configurationFile="%LOGGING%" -cp "%JENA_CP%" riotcmd.utf8 %*

 exit /B

diff --git a/apache-jena/bat/wwwdec.bat b/apache-jena/bat/wwwdec.bat
index f803fe9..3c002bb 100644
--- a/apache-jena/bat/wwwdec.bat
+++ b/apache-jena/bat/wwwdec.bat
@@ -13,6 +13,10 @@
 set JENA_CP=%JENA_HOME%\lib\*;

 set LOGGING=file:%JENA_HOME%/log4j2.properties

 

+if "%CLASSPATH%" == "" goto :noExtra

+set JENA_CP="%JENA_CP%:%CLASSPATH%"

+:noExtra

+

 @rem JVM_ARGS comes from the environment.

 java %JVM_ARGS% -Dlog4j.configurationFile="%LOGGING%" -cp "%JENA_CP%" arq.wwwdec %*

 exit /B

diff --git a/apache-jena/bat/wwwenc.bat b/apache-jena/bat/wwwenc.bat
index 6f690db..853daa9 100644
--- a/apache-jena/bat/wwwenc.bat
+++ b/apache-jena/bat/wwwenc.bat
@@ -13,6 +13,10 @@
 set JENA_CP=%JENA_HOME%\lib\*;

 set LOGGING=file:%JENA_HOME%/log4j2.properties

 

+if "%CLASSPATH%" == "" goto :noExtra

+set JENA_CP="%JENA_CP%:%CLASSPATH%"

+:noExtra

+

 @rem JVM_ARGS comes from the environment.

 java %JVM_ARGS% -Dlog4j.configurationFile="%LOGGING%" -cp "%JENA_CP%" arq.wwwenc %*

 exit /B

diff --git a/apache-jena/bin/arq b/apache-jena/bin/arq
index 62a7e6b..33b9141 100755
--- a/apache-jena/bin/arq
+++ b/apache-jena/bin/arq
@@ -87,6 +87,7 @@
 # JVM_ARGS : don't set here but it can be set in the environment.
 # Expand JENA_HOME but literal *
 JENA_CP="$JENA_HOME"'/lib/*'
+
 LOGGING="${LOGGING:--Dlog4j.configurationFile=file:$JENA_HOME/log4j2.properties}"
 
 # Platform specific fixup
@@ -105,4 +106,10 @@
     JVM_ARGS="$JVM_ARGS -Djava.io.tmpdir=\"$TMP\""
 fi
 
+## Append any custom classpath
+if [ -n "$CLASSPATH" ]
+then
+    JENA_CP="$JENA_CP:$CLASSPATH"
+fi
+
 "$JAVA" $JVM_ARGS $LOGGING -cp "$JENA_CP" arq.arq "$@" 
diff --git a/apache-jena/bin/infer b/apache-jena/bin/infer
index 60e753d..6bb4885 100755
--- a/apache-jena/bin/infer
+++ b/apache-jena/bin/infer
@@ -87,6 +87,7 @@
 # JVM_ARGS : don't set here but it can be set in the environment.
 # Expand JENA_HOME but literal *
 JENA_CP="$JENA_HOME"'/lib/*'
+
 LOGGING="${LOGGING:--Dlog4j.configurationFile=file:$JENA_HOME/log4j2.properties}"
 
 # Platform specific fixup
@@ -105,4 +106,10 @@
     JVM_ARGS="$JVM_ARGS -Djava.io.tmpdir=\"$TMP\""
 fi
 
+## Append any custom classpath
+if [ -n "$CLASSPATH" ]
+then
+    JENA_CP="$JENA_CP:$CLASSPATH"
+fi
+
 "$JAVA" $JVM_ARGS $LOGGING -cp "$JENA_CP" riotcmd.infer "$@" 
diff --git a/apache-jena/bin/iri b/apache-jena/bin/iri
index 4074aeb..5ca1518 100755
--- a/apache-jena/bin/iri
+++ b/apache-jena/bin/iri
@@ -87,6 +87,7 @@
 # JVM_ARGS : don't set here but it can be set in the environment.
 # Expand JENA_HOME but literal *
 JENA_CP="$JENA_HOME"'/lib/*'
+
 LOGGING="${LOGGING:--Dlog4j.configurationFile=file:$JENA_HOME/log4j2.properties}"
 
 # Platform specific fixup
@@ -105,4 +106,10 @@
     JVM_ARGS="$JVM_ARGS -Djava.io.tmpdir=\"$TMP\""
 fi
 
+## Append any custom classpath
+if [ -n "$CLASSPATH" ]
+then
+    JENA_CP="$JENA_CP:$CLASSPATH"
+fi
+
 "$JAVA" $JVM_ARGS $LOGGING -cp "$JENA_CP" arq.iri "$@" 
diff --git a/apache-jena/bin/jena.version b/apache-jena/bin/jena.version
index 3179358..2b6fe3c 100755
--- a/apache-jena/bin/jena.version
+++ b/apache-jena/bin/jena.version
@@ -87,6 +87,7 @@
 # JVM_ARGS : don't set here but it can be set in the environment.
 # Expand JENA_HOME but literal *
 JENA_CP="$JENA_HOME"'/lib/*'
+
 LOGGING="${LOGGING:--Dlog4j.configurationFile=file:$JENA_HOME/log4j2.properties}"
 
 # Platform specific fixup
@@ -105,4 +106,10 @@
     JVM_ARGS="$JVM_ARGS -Djava.io.tmpdir=\"$TMP\""
 fi
 
+## Append any custom classpath
+if [ -n "$CLASSPATH" ]
+then
+    JENA_CP="$JENA_CP:$CLASSPATH"
+fi
+
 "$JAVA" $JVM_ARGS $LOGGING -cp "$JENA_CP" jena.version "$@" 
diff --git a/apache-jena/bin/juuid b/apache-jena/bin/juuid
index e61f83b..97d7d7251 100755
--- a/apache-jena/bin/juuid
+++ b/apache-jena/bin/juuid
@@ -87,6 +87,7 @@
 # JVM_ARGS : don't set here but it can be set in the environment.
 # Expand JENA_HOME but literal *
 JENA_CP="$JENA_HOME"'/lib/*'
+
 LOGGING="${LOGGING:--Dlog4j.configurationFile=file:$JENA_HOME/log4j2.properties}"
 
 # Platform specific fixup
@@ -105,4 +106,10 @@
     JVM_ARGS="$JVM_ARGS -Djava.io.tmpdir=\"$TMP\""
 fi
 
+## Append any custom classpath
+if [ -n "$CLASSPATH" ]
+then
+    JENA_CP="$JENA_CP:$CLASSPATH"
+fi
+
 "$JAVA" $JVM_ARGS $LOGGING -cp "$JENA_CP" arq.juuid "$@" 
diff --git a/apache-jena/bin/nquads b/apache-jena/bin/nquads
index 6ff1bc5..25b1850 100755
--- a/apache-jena/bin/nquads
+++ b/apache-jena/bin/nquads
@@ -87,6 +87,7 @@
 # JVM_ARGS : don't set here but it can be set in the environment.
 # Expand JENA_HOME but literal *
 JENA_CP="$JENA_HOME"'/lib/*'
+
 LOGGING="${LOGGING:--Dlog4j.configurationFile=file:$JENA_HOME/log4j2.properties}"
 
 # Platform specific fixup
@@ -105,4 +106,10 @@
     JVM_ARGS="$JVM_ARGS -Djava.io.tmpdir=\"$TMP\""
 fi
 
+## Append any custom classpath
+if [ -n "$CLASSPATH" ]
+then
+    JENA_CP="$JENA_CP:$CLASSPATH"
+fi
+
 "$JAVA" $JVM_ARGS $LOGGING -cp "$JENA_CP" riotcmd.nquads "$@" 
diff --git a/apache-jena/bin/ntriples b/apache-jena/bin/ntriples
index 00b3019..a5917e0 100755
--- a/apache-jena/bin/ntriples
+++ b/apache-jena/bin/ntriples
@@ -87,6 +87,7 @@
 # JVM_ARGS : don't set here but it can be set in the environment.
 # Expand JENA_HOME but literal *
 JENA_CP="$JENA_HOME"'/lib/*'
+
 LOGGING="${LOGGING:--Dlog4j.configurationFile=file:$JENA_HOME/log4j2.properties}"
 
 # Platform specific fixup
@@ -105,4 +106,10 @@
     JVM_ARGS="$JVM_ARGS -Djava.io.tmpdir=\"$TMP\""
 fi
 
+## Append any custom classpath
+if [ -n "$CLASSPATH" ]
+then
+    JENA_CP="$JENA_CP:$CLASSPATH"
+fi
+
 "$JAVA" $JVM_ARGS $LOGGING -cp "$JENA_CP" riotcmd.ntriples "$@" 
diff --git a/apache-jena/bin/qparse b/apache-jena/bin/qparse
index 64c91a1..6a542c3 100755
--- a/apache-jena/bin/qparse
+++ b/apache-jena/bin/qparse
@@ -87,6 +87,7 @@
 # JVM_ARGS : don't set here but it can be set in the environment.
 # Expand JENA_HOME but literal *
 JENA_CP="$JENA_HOME"'/lib/*'
+
 LOGGING="${LOGGING:--Dlog4j.configurationFile=file:$JENA_HOME/log4j2.properties}"
 
 # Platform specific fixup
@@ -105,4 +106,10 @@
     JVM_ARGS="$JVM_ARGS -Djava.io.tmpdir=\"$TMP\""
 fi
 
+## Append any custom classpath
+if [ -n "$CLASSPATH" ]
+then
+    JENA_CP="$JENA_CP:$CLASSPATH"
+fi
+
 "$JAVA" $JVM_ARGS $LOGGING -cp "$JENA_CP" arq.qparse "$@" 
diff --git a/apache-jena/bin/rdfcat b/apache-jena/bin/rdfcat
index f7a8c4f..5343a99 100755
--- a/apache-jena/bin/rdfcat
+++ b/apache-jena/bin/rdfcat
@@ -87,6 +87,7 @@
 # JVM_ARGS : don't set here but it can be set in the environment.
 # Expand JENA_HOME but literal *
 JENA_CP="$JENA_HOME"'/lib/*'
+
 LOGGING="${LOGGING:--Dlog4j.configurationFile=file:$JENA_HOME/log4j2.properties}"
 
 # Platform specific fixup
@@ -105,4 +106,10 @@
     JVM_ARGS="$JVM_ARGS -Djava.io.tmpdir=\"$TMP\""
 fi
 
+## Append any custom classpath
+if [ -n "$CLASSPATH" ]
+then
+    JENA_CP="$JENA_CP:$CLASSPATH"
+fi
+
 "$JAVA" $JVM_ARGS $LOGGING -cp "$JENA_CP" jena.rdfcat "$@" 
diff --git a/apache-jena/bin/rdfcompare b/apache-jena/bin/rdfcompare
index 39fdb89..1c58dc8 100755
--- a/apache-jena/bin/rdfcompare
+++ b/apache-jena/bin/rdfcompare
@@ -87,6 +87,7 @@
 # JVM_ARGS : don't set here but it can be set in the environment.
 # Expand JENA_HOME but literal *
 JENA_CP="$JENA_HOME"'/lib/*'
+
 LOGGING="${LOGGING:--Dlog4j.configurationFile=file:$JENA_HOME/log4j2.properties}"
 
 # Platform specific fixup
@@ -105,4 +106,10 @@
     JVM_ARGS="$JVM_ARGS -Djava.io.tmpdir=\"$TMP\""
 fi
 
+## Append any custom classpath
+if [ -n "$CLASSPATH" ]
+then
+    JENA_CP="$JENA_CP:$CLASSPATH"
+fi
+
 "$JAVA" $JVM_ARGS $LOGGING -cp "$JENA_CP" jena.rdfcompare "$@" 
diff --git a/apache-jena/bin/rdfcopy b/apache-jena/bin/rdfcopy
index 384971c..5c83196 100755
--- a/apache-jena/bin/rdfcopy
+++ b/apache-jena/bin/rdfcopy
@@ -87,6 +87,7 @@
 # JVM_ARGS : don't set here but it can be set in the environment.
 # Expand JENA_HOME but literal *
 JENA_CP="$JENA_HOME"'/lib/*'
+
 LOGGING="${LOGGING:--Dlog4j.configurationFile=file:$JENA_HOME/log4j2.properties}"
 
 # Platform specific fixup
@@ -105,4 +106,10 @@
     JVM_ARGS="$JVM_ARGS -Djava.io.tmpdir=\"$TMP\""
 fi
 
+## Append any custom classpath
+if [ -n "$CLASSPATH" ]
+then
+    JENA_CP="$JENA_CP:$CLASSPATH"
+fi
+
 "$JAVA" $JVM_ARGS $LOGGING -cp "$JENA_CP" jena.rdfcopy "$@" 
diff --git a/apache-jena/bin/rdfdiff b/apache-jena/bin/rdfdiff
index 63ac26f..276386b 100755
--- a/apache-jena/bin/rdfdiff
+++ b/apache-jena/bin/rdfdiff
@@ -87,6 +87,7 @@
 # JVM_ARGS : don't set here but it can be set in the environment.
 # Expand JENA_HOME but literal *
 JENA_CP="$JENA_HOME"'/lib/*'
+
 LOGGING="${LOGGING:--Dlog4j.configurationFile=file:$JENA_HOME/log4j2.properties}"
 
 # Platform specific fixup
@@ -105,4 +106,10 @@
     JVM_ARGS="$JVM_ARGS -Djava.io.tmpdir=\"$TMP\""
 fi
 
+## Append any custom classpath
+if [ -n "$CLASSPATH" ]
+then
+    JENA_CP="$JENA_CP:$CLASSPATH"
+fi
+
 "$JAVA" $JVM_ARGS $LOGGING -cp "$JENA_CP" arq.rdfdiff "$@" 
diff --git a/apache-jena/bin/rdfparse b/apache-jena/bin/rdfparse
index 61111c8..fcac3ca 100755
--- a/apache-jena/bin/rdfparse
+++ b/apache-jena/bin/rdfparse
@@ -87,6 +87,7 @@
 # JVM_ARGS : don't set here but it can be set in the environment.
 # Expand JENA_HOME but literal *
 JENA_CP="$JENA_HOME"'/lib/*'
+
 LOGGING="${LOGGING:--Dlog4j.configurationFile=file:$JENA_HOME/log4j2.properties}"
 
 # Platform specific fixup
@@ -105,4 +106,10 @@
     JVM_ARGS="$JVM_ARGS -Djava.io.tmpdir=\"$TMP\""
 fi
 
+## Append any custom classpath
+if [ -n "$CLASSPATH" ]
+then
+    JENA_CP="$JENA_CP:$CLASSPATH"
+fi
+
 "$JAVA" $JVM_ARGS $LOGGING -cp "$JENA_CP" jena.rdfparse "$@" 
diff --git a/apache-jena/bin/rdfpatch b/apache-jena/bin/rdfpatch
index a308c6d..d80452b 100755
--- a/apache-jena/bin/rdfpatch
+++ b/apache-jena/bin/rdfpatch
@@ -87,6 +87,7 @@
 # JVM_ARGS : don't set here but it can be set in the environment.
 # Expand JENA_HOME but literal *
 JENA_CP="$JENA_HOME"'/lib/*'
+
 LOGGING="${LOGGING:--Dlog4j.configurationFile=file:$JENA_HOME/log4j2.properties}"
 
 # Platform specific fixup
@@ -105,4 +106,10 @@
     JVM_ARGS="$JVM_ARGS -Djava.io.tmpdir=\"$TMP\""
 fi
 
+## Append any custom classpath
+if [ -n "$CLASSPATH" ]
+then
+    JENA_CP="$JENA_CP:$CLASSPATH"
+fi
+
 "$JAVA" $JVM_ARGS $LOGGING -cp "$JENA_CP" rdfpatch.rdfpatch "$@" 
diff --git a/apache-jena/bin/rdfxml b/apache-jena/bin/rdfxml
index 46b25bf..f419929 100755
--- a/apache-jena/bin/rdfxml
+++ b/apache-jena/bin/rdfxml
@@ -87,6 +87,7 @@
 # JVM_ARGS : don't set here but it can be set in the environment.
 # Expand JENA_HOME but literal *
 JENA_CP="$JENA_HOME"'/lib/*'
+
 LOGGING="${LOGGING:--Dlog4j.configurationFile=file:$JENA_HOME/log4j2.properties}"
 
 # Platform specific fixup
@@ -105,4 +106,10 @@
     JVM_ARGS="$JVM_ARGS -Djava.io.tmpdir=\"$TMP\""
 fi
 
+## Append any custom classpath
+if [ -n "$CLASSPATH" ]
+then
+    JENA_CP="$JENA_CP:$CLASSPATH"
+fi
+
 "$JAVA" $JVM_ARGS $LOGGING -cp "$JENA_CP" riotcmd.rdfxml "$@" 
diff --git a/apache-jena/bin/riot b/apache-jena/bin/riot
index 828a506..a876b4b 100755
--- a/apache-jena/bin/riot
+++ b/apache-jena/bin/riot
@@ -87,6 +87,7 @@
 # JVM_ARGS : don't set here but it can be set in the environment.
 # Expand JENA_HOME but literal *
 JENA_CP="$JENA_HOME"'/lib/*'
+
 LOGGING="${LOGGING:--Dlog4j.configurationFile=file:$JENA_HOME/log4j2.properties}"
 
 # Platform specific fixup
@@ -105,4 +106,10 @@
     JVM_ARGS="$JVM_ARGS -Djava.io.tmpdir=\"$TMP\""
 fi
 
+## Append any custom classpath
+if [ -n "$CLASSPATH" ]
+then
+    JENA_CP="$JENA_CP:$CLASSPATH"
+fi
+
 "$JAVA" $JVM_ARGS $LOGGING -cp "$JENA_CP" riotcmd.riot "$@" 
diff --git a/apache-jena/bin/rset b/apache-jena/bin/rset
index 0ec6d4a..764ca8e 100755
--- a/apache-jena/bin/rset
+++ b/apache-jena/bin/rset
@@ -87,6 +87,7 @@
 # JVM_ARGS : don't set here but it can be set in the environment.
 # Expand JENA_HOME but literal *
 JENA_CP="$JENA_HOME"'/lib/*'
+
 LOGGING="${LOGGING:--Dlog4j.configurationFile=file:$JENA_HOME/log4j2.properties}"
 
 # Platform specific fixup
@@ -105,4 +106,10 @@
     JVM_ARGS="$JVM_ARGS -Djava.io.tmpdir=\"$TMP\""
 fi
 
+## Append any custom classpath
+if [ -n "$CLASSPATH" ]
+then
+    JENA_CP="$JENA_CP:$CLASSPATH"
+fi
+
 "$JAVA" $JVM_ARGS $LOGGING -cp "$JENA_CP" arq.rset "$@" 
diff --git a/apache-jena/bin/rsparql b/apache-jena/bin/rsparql
index ab82472..ffd217e 100755
--- a/apache-jena/bin/rsparql
+++ b/apache-jena/bin/rsparql
@@ -87,6 +87,7 @@
 # JVM_ARGS : don't set here but it can be set in the environment.
 # Expand JENA_HOME but literal *
 JENA_CP="$JENA_HOME"'/lib/*'
+
 LOGGING="${LOGGING:--Dlog4j.configurationFile=file:$JENA_HOME/log4j2.properties}"
 
 # Platform specific fixup
@@ -105,4 +106,10 @@
     JVM_ARGS="$JVM_ARGS -Djava.io.tmpdir=\"$TMP\""
 fi
 
+## Append any custom classpath
+if [ -n "$CLASSPATH" ]
+then
+    JENA_CP="$JENA_CP:$CLASSPATH"
+fi
+
 "$JAVA" $JVM_ARGS $LOGGING -cp "$JENA_CP" arq.rsparql "$@" 
diff --git a/apache-jena/bin/rupdate b/apache-jena/bin/rupdate
index 27538a3..599f956 100755
--- a/apache-jena/bin/rupdate
+++ b/apache-jena/bin/rupdate
@@ -87,6 +87,7 @@
 # JVM_ARGS : don't set here but it can be set in the environment.
 # Expand JENA_HOME but literal *
 JENA_CP="$JENA_HOME"'/lib/*'
+
 LOGGING="${LOGGING:--Dlog4j.configurationFile=file:$JENA_HOME/log4j2.properties}"
 
 # Platform specific fixup
@@ -105,4 +106,10 @@
     JVM_ARGS="$JVM_ARGS -Djava.io.tmpdir=\"$TMP\""
 fi
 
+## Append any custom classpath
+if [ -n "$CLASSPATH" ]
+then
+    JENA_CP="$JENA_CP:$CLASSPATH"
+fi
+
 "$JAVA" $JVM_ARGS $LOGGING -cp "$JENA_CP" arq.rupdate "$@" 
diff --git a/apache-jena/bin/schemagen b/apache-jena/bin/schemagen
index c5e334e..3ccae45 100755
--- a/apache-jena/bin/schemagen
+++ b/apache-jena/bin/schemagen
@@ -87,6 +87,7 @@
 # JVM_ARGS : don't set here but it can be set in the environment.
 # Expand JENA_HOME but literal *
 JENA_CP="$JENA_HOME"'/lib/*'
+
 LOGGING="${LOGGING:--Dlog4j.configurationFile=file:$JENA_HOME/log4j2.properties}"
 
 # Platform specific fixup
@@ -105,4 +106,10 @@
     JVM_ARGS="$JVM_ARGS -Djava.io.tmpdir=\"$TMP\""
 fi
 
+## Append any custom classpath
+if [ -n "$CLASSPATH" ]
+then
+    JENA_CP="$JENA_CP:$CLASSPATH"
+fi
+
 "$JAVA" $JVM_ARGS $LOGGING -cp "$JENA_CP" jena.schemagen "$@" 
diff --git a/apache-jena/bin/shacl b/apache-jena/bin/shacl
index 5c109a0..4d743d4 100755
--- a/apache-jena/bin/shacl
+++ b/apache-jena/bin/shacl
@@ -87,6 +87,7 @@
 # JVM_ARGS : don't set here but it can be set in the environment.
 # Expand JENA_HOME but literal *
 JENA_CP="$JENA_HOME"'/lib/*'
+
 LOGGING="${LOGGING:--Dlog4j.configurationFile=file:$JENA_HOME/log4j2.properties}"
 
 # Platform specific fixup
@@ -105,4 +106,10 @@
     JVM_ARGS="$JVM_ARGS -Djava.io.tmpdir=\"$TMP\""
 fi
 
+## Append any custom classpath
+if [ -n "$CLASSPATH" ]
+then
+    JENA_CP="$JENA_CP:$CLASSPATH"
+fi
+
 "$JAVA" $JVM_ARGS $LOGGING -cp "$JENA_CP" shacl.shacl "$@" 
diff --git a/apache-jena/bin/shex b/apache-jena/bin/shex
index 67877cd..c214b69 100755
--- a/apache-jena/bin/shex
+++ b/apache-jena/bin/shex
@@ -87,6 +87,7 @@
 # JVM_ARGS : don't set here but it can be set in the environment.
 # Expand JENA_HOME but literal *
 JENA_CP="$JENA_HOME"'/lib/*'
+
 LOGGING="${LOGGING:--Dlog4j.configurationFile=file:$JENA_HOME/log4j2.properties}"
 
 # Platform specific fixup
@@ -105,4 +106,10 @@
     JVM_ARGS="$JVM_ARGS -Djava.io.tmpdir=\"$TMP\""
 fi
 
+## Append any custom classpath
+if [ -n "$CLASSPATH" ]
+then
+    JENA_CP="$JENA_CP:$CLASSPATH"
+fi
+
 "$JAVA" $JVM_ARGS $LOGGING -cp "$JENA_CP" shex.shex "$@" 
diff --git a/apache-jena/bin/sparql b/apache-jena/bin/sparql
index 41efb73..7954455 100755
--- a/apache-jena/bin/sparql
+++ b/apache-jena/bin/sparql
@@ -87,6 +87,7 @@
 # JVM_ARGS : don't set here but it can be set in the environment.
 # Expand JENA_HOME but literal *
 JENA_CP="$JENA_HOME"'/lib/*'
+
 LOGGING="${LOGGING:--Dlog4j.configurationFile=file:$JENA_HOME/log4j2.properties}"
 
 # Platform specific fixup
@@ -105,4 +106,10 @@
     JVM_ARGS="$JVM_ARGS -Djava.io.tmpdir=\"$TMP\""
 fi
 
+## Append any custom classpath
+if [ -n "$CLASSPATH" ]
+then
+    JENA_CP="$JENA_CP:$CLASSPATH"
+fi
+
 "$JAVA" $JVM_ARGS $LOGGING -cp "$JENA_CP" arq.sparql "$@" 
diff --git a/apache-jena/bin/tdb2.tdbbackup b/apache-jena/bin/tdb2.tdbbackup
index 6df5614..a9a4e4b 100755
--- a/apache-jena/bin/tdb2.tdbbackup
+++ b/apache-jena/bin/tdb2.tdbbackup
@@ -87,6 +87,7 @@
 # JVM_ARGS : don't set here but it can be set in the environment.
 # Expand JENA_HOME but literal *
 JENA_CP="$JENA_HOME"'/lib/*'
+
 LOGGING="${LOGGING:--Dlog4j.configurationFile=file:$JENA_HOME/log4j2.properties}"
 
 # Platform specific fixup
@@ -105,4 +106,10 @@
     JVM_ARGS="$JVM_ARGS -Djava.io.tmpdir=\"$TMP\""
 fi
 
+## Append any custom classpath
+if [ -n "$CLASSPATH" ]
+then
+    JENA_CP="$JENA_CP:$CLASSPATH"
+fi
+
 "$JAVA" $JVM_ARGS $LOGGING -cp "$JENA_CP" tdb2.tdbbackup "$@" 
diff --git a/apache-jena/bin/tdb2.tdbcompact b/apache-jena/bin/tdb2.tdbcompact
index 1ad330e..cdce882 100755
--- a/apache-jena/bin/tdb2.tdbcompact
+++ b/apache-jena/bin/tdb2.tdbcompact
@@ -87,6 +87,7 @@
 # JVM_ARGS : don't set here but it can be set in the environment.
 # Expand JENA_HOME but literal *
 JENA_CP="$JENA_HOME"'/lib/*'
+
 LOGGING="${LOGGING:--Dlog4j.configurationFile=file:$JENA_HOME/log4j2.properties}"
 
 # Platform specific fixup
@@ -105,4 +106,10 @@
     JVM_ARGS="$JVM_ARGS -Djava.io.tmpdir=\"$TMP\""
 fi
 
+## Append any custom classpath
+if [ -n "$CLASSPATH" ]
+then
+    JENA_CP="$JENA_CP:$CLASSPATH"
+fi
+
 "$JAVA" $JVM_ARGS $LOGGING -cp "$JENA_CP" tdb2.tdbcompact "$@" 
diff --git a/apache-jena/bin/tdb2.tdbdump b/apache-jena/bin/tdb2.tdbdump
index b951a9d..2bf5399 100755
--- a/apache-jena/bin/tdb2.tdbdump
+++ b/apache-jena/bin/tdb2.tdbdump
@@ -87,6 +87,7 @@
 # JVM_ARGS : don't set here but it can be set in the environment.
 # Expand JENA_HOME but literal *
 JENA_CP="$JENA_HOME"'/lib/*'
+
 LOGGING="${LOGGING:--Dlog4j.configurationFile=file:$JENA_HOME/log4j2.properties}"
 
 # Platform specific fixup
@@ -105,4 +106,10 @@
     JVM_ARGS="$JVM_ARGS -Djava.io.tmpdir=\"$TMP\""
 fi
 
+## Append any custom classpath
+if [ -n "$CLASSPATH" ]
+then
+    JENA_CP="$JENA_CP:$CLASSPATH"
+fi
+
 "$JAVA" $JVM_ARGS $LOGGING -cp "$JENA_CP" tdb2.tdbdump "$@" 
diff --git a/apache-jena/bin/tdb2.tdbloader b/apache-jena/bin/tdb2.tdbloader
index 85a930b..8fb3048 100755
--- a/apache-jena/bin/tdb2.tdbloader
+++ b/apache-jena/bin/tdb2.tdbloader
@@ -87,6 +87,7 @@
 # JVM_ARGS : don't set here but it can be set in the environment.
 # Expand JENA_HOME but literal *
 JENA_CP="$JENA_HOME"'/lib/*'
+
 LOGGING="${LOGGING:--Dlog4j.configurationFile=file:$JENA_HOME/log4j2.properties}"
 
 # Platform specific fixup
@@ -105,4 +106,10 @@
     JVM_ARGS="$JVM_ARGS -Djava.io.tmpdir=\"$TMP\""
 fi
 
+## Append any custom classpath
+if [ -n "$CLASSPATH" ]
+then
+    JENA_CP="$JENA_CP:$CLASSPATH"
+fi
+
 "$JAVA" $JVM_ARGS $LOGGING -cp "$JENA_CP" tdb2.tdbloader "$@" 
diff --git a/apache-jena/bin/tdb2.tdbquery b/apache-jena/bin/tdb2.tdbquery
index db410bb..eeed824 100755
--- a/apache-jena/bin/tdb2.tdbquery
+++ b/apache-jena/bin/tdb2.tdbquery
@@ -87,6 +87,7 @@
 # JVM_ARGS : don't set here but it can be set in the environment.
 # Expand JENA_HOME but literal *
 JENA_CP="$JENA_HOME"'/lib/*'
+
 LOGGING="${LOGGING:--Dlog4j.configurationFile=file:$JENA_HOME/log4j2.properties}"
 
 # Platform specific fixup
@@ -105,4 +106,10 @@
     JVM_ARGS="$JVM_ARGS -Djava.io.tmpdir=\"$TMP\""
 fi
 
+## Append any custom classpath
+if [ -n "$CLASSPATH" ]
+then
+    JENA_CP="$JENA_CP:$CLASSPATH"
+fi
+
 "$JAVA" $JVM_ARGS $LOGGING -cp "$JENA_CP" tdb2.tdbquery "$@" 
diff --git a/apache-jena/bin/tdb2.tdbstats b/apache-jena/bin/tdb2.tdbstats
index acd2554..ebd344f 100644
--- a/apache-jena/bin/tdb2.tdbstats
+++ b/apache-jena/bin/tdb2.tdbstats
@@ -87,6 +87,7 @@
 # JVM_ARGS : don't set here but it can be set in the environment.
 # Expand JENA_HOME but literal *
 JENA_CP="$JENA_HOME"'/lib/*'
+
 LOGGING="${LOGGING:--Dlog4j.configurationFile=file:$JENA_HOME/log4j2.properties}"
 
 # Platform specific fixup
@@ -105,4 +106,10 @@
     JVM_ARGS="$JVM_ARGS -Djava.io.tmpdir=\"$TMP\""
 fi
 
+## Append any custom classpath
+if [ -n "$CLASSPATH" ]
+then
+    JENA_CP="$JENA_CP:$CLASSPATH"
+fi
+
 "$JAVA" $JVM_ARGS $LOGGING -cp "$JENA_CP" tdb2.tdbstats "$@" 
diff --git a/apache-jena/bin/tdb2.tdbupdate b/apache-jena/bin/tdb2.tdbupdate
index 69c8ca1..0824439 100755
--- a/apache-jena/bin/tdb2.tdbupdate
+++ b/apache-jena/bin/tdb2.tdbupdate
@@ -87,6 +87,7 @@
 # JVM_ARGS : don't set here but it can be set in the environment.
 # Expand JENA_HOME but literal *
 JENA_CP="$JENA_HOME"'/lib/*'
+
 LOGGING="${LOGGING:--Dlog4j.configurationFile=file:$JENA_HOME/log4j2.properties}"
 
 # Platform specific fixup
@@ -105,4 +106,10 @@
     JVM_ARGS="$JVM_ARGS -Djava.io.tmpdir=\"$TMP\""
 fi
 
+## Append any custom classpath
+if [ -n "$CLASSPATH" ]
+then
+    JENA_CP="$JENA_CP:$CLASSPATH"
+fi
+
 "$JAVA" $JVM_ARGS $LOGGING -cp "$JENA_CP" tdb2.tdbupdate "$@" 
diff --git a/apache-jena/bin/tdbbackup b/apache-jena/bin/tdbbackup
index 3d14ea0..31be3c4 100755
--- a/apache-jena/bin/tdbbackup
+++ b/apache-jena/bin/tdbbackup
@@ -87,6 +87,7 @@
 # JVM_ARGS : don't set here but it can be set in the environment.
 # Expand JENA_HOME but literal *
 JENA_CP="$JENA_HOME"'/lib/*'
+
 LOGGING="${LOGGING:--Dlog4j.configurationFile=file:$JENA_HOME/log4j2.properties}"
 
 # Platform specific fixup
@@ -105,4 +106,10 @@
     JVM_ARGS="$JVM_ARGS -Djava.io.tmpdir=\"$TMP\""
 fi
 
+## Append any custom classpath
+if [ -n "$CLASSPATH" ]
+then
+    JENA_CP="$JENA_CP:$CLASSPATH"
+fi
+
 "$JAVA" $JVM_ARGS $LOGGING -cp "$JENA_CP" tdb.tdbbackup "$@" 
diff --git a/apache-jena/bin/tdbdump b/apache-jena/bin/tdbdump
index 3abe21a..7e8cc0a 100755
--- a/apache-jena/bin/tdbdump
+++ b/apache-jena/bin/tdbdump
@@ -87,6 +87,7 @@
 # JVM_ARGS : don't set here but it can be set in the environment.
 # Expand JENA_HOME but literal *
 JENA_CP="$JENA_HOME"'/lib/*'
+
 LOGGING="${LOGGING:--Dlog4j.configurationFile=file:$JENA_HOME/log4j2.properties}"
 
 # Platform specific fixup
@@ -105,4 +106,10 @@
     JVM_ARGS="$JVM_ARGS -Djava.io.tmpdir=\"$TMP\""
 fi
 
+## Append any custom classpath
+if [ -n "$CLASSPATH" ]
+then
+    JENA_CP="$JENA_CP:$CLASSPATH"
+fi
+
 "$JAVA" $JVM_ARGS $LOGGING -cp "$JENA_CP" tdb.tdbdump "$@" 
diff --git a/apache-jena/bin/tdbloader b/apache-jena/bin/tdbloader
index c327c93..080a7d1 100755
--- a/apache-jena/bin/tdbloader
+++ b/apache-jena/bin/tdbloader
@@ -87,6 +87,7 @@
 # JVM_ARGS : don't set here but it can be set in the environment.
 # Expand JENA_HOME but literal *
 JENA_CP="$JENA_HOME"'/lib/*'
+
 LOGGING="${LOGGING:--Dlog4j.configurationFile=file:$JENA_HOME/log4j2.properties}"
 
 # Platform specific fixup
@@ -105,4 +106,10 @@
     JVM_ARGS="$JVM_ARGS -Djava.io.tmpdir=\"$TMP\""
 fi
 
+## Append any custom classpath
+if [ -n "$CLASSPATH" ]
+then
+    JENA_CP="$JENA_CP:$CLASSPATH"
+fi
+
 "$JAVA" $JVM_ARGS $LOGGING -cp "$JENA_CP" tdb.tdbloader "$@" 
diff --git a/apache-jena/bin/tdbquery b/apache-jena/bin/tdbquery
index 5f661a7..e331b64 100755
--- a/apache-jena/bin/tdbquery
+++ b/apache-jena/bin/tdbquery
@@ -87,6 +87,7 @@
 # JVM_ARGS : don't set here but it can be set in the environment.
 # Expand JENA_HOME but literal *
 JENA_CP="$JENA_HOME"'/lib/*'
+
 LOGGING="${LOGGING:--Dlog4j.configurationFile=file:$JENA_HOME/log4j2.properties}"
 
 # Platform specific fixup
@@ -105,4 +106,10 @@
     JVM_ARGS="$JVM_ARGS -Djava.io.tmpdir=\"$TMP\""
 fi
 
+## Append any custom classpath
+if [ -n "$CLASSPATH" ]
+then
+    JENA_CP="$JENA_CP:$CLASSPATH"
+fi
+
 "$JAVA" $JVM_ARGS $LOGGING -cp "$JENA_CP" tdb.tdbquery "$@" 
diff --git a/apache-jena/bin/tdbstats b/apache-jena/bin/tdbstats
index 5818a71..c7e9f1e 100755
--- a/apache-jena/bin/tdbstats
+++ b/apache-jena/bin/tdbstats
@@ -87,6 +87,7 @@
 # JVM_ARGS : don't set here but it can be set in the environment.
 # Expand JENA_HOME but literal *
 JENA_CP="$JENA_HOME"'/lib/*'
+
 LOGGING="${LOGGING:--Dlog4j.configurationFile=file:$JENA_HOME/log4j2.properties}"
 
 # Platform specific fixup
@@ -105,4 +106,10 @@
     JVM_ARGS="$JVM_ARGS -Djava.io.tmpdir=\"$TMP\""
 fi
 
+## Append any custom classpath
+if [ -n "$CLASSPATH" ]
+then
+    JENA_CP="$JENA_CP:$CLASSPATH"
+fi
+
 "$JAVA" $JVM_ARGS $LOGGING -cp "$JENA_CP" tdb.tdbstats "$@" 
diff --git a/apache-jena/bin/tdbupdate b/apache-jena/bin/tdbupdate
index dd67fb2..9c709f6 100755
--- a/apache-jena/bin/tdbupdate
+++ b/apache-jena/bin/tdbupdate
@@ -87,6 +87,7 @@
 # JVM_ARGS : don't set here but it can be set in the environment.
 # Expand JENA_HOME but literal *
 JENA_CP="$JENA_HOME"'/lib/*'
+
 LOGGING="${LOGGING:--Dlog4j.configurationFile=file:$JENA_HOME/log4j2.properties}"
 
 # Platform specific fixup
@@ -105,4 +106,10 @@
     JVM_ARGS="$JVM_ARGS -Djava.io.tmpdir=\"$TMP\""
 fi
 
+## Append any custom classpath
+if [ -n "$CLASSPATH" ]
+then
+    JENA_CP="$JENA_CP:$CLASSPATH"
+fi
+
 "$JAVA" $JVM_ARGS $LOGGING -cp "$JENA_CP" tdb.tdbupdate "$@" 
diff --git a/apache-jena/bin/trig b/apache-jena/bin/trig
index 6156e73..54f35b9 100755
--- a/apache-jena/bin/trig
+++ b/apache-jena/bin/trig
@@ -87,6 +87,7 @@
 # JVM_ARGS : don't set here but it can be set in the environment.
 # Expand JENA_HOME but literal *
 JENA_CP="$JENA_HOME"'/lib/*'
+
 LOGGING="${LOGGING:--Dlog4j.configurationFile=file:$JENA_HOME/log4j2.properties}"
 
 # Platform specific fixup
@@ -105,4 +106,10 @@
     JVM_ARGS="$JVM_ARGS -Djava.io.tmpdir=\"$TMP\""
 fi
 
+## Append any custom classpath
+if [ -n "$CLASSPATH" ]
+then
+    JENA_CP="$JENA_CP:$CLASSPATH"
+fi
+
 "$JAVA" $JVM_ARGS $LOGGING -cp "$JENA_CP" riotcmd.trig "$@" 
diff --git a/apache-jena/bin/turtle b/apache-jena/bin/turtle
index 375b653..bad7fdb 100755
--- a/apache-jena/bin/turtle
+++ b/apache-jena/bin/turtle
@@ -87,6 +87,7 @@
 # JVM_ARGS : don't set here but it can be set in the environment.
 # Expand JENA_HOME but literal *
 JENA_CP="$JENA_HOME"'/lib/*'
+
 LOGGING="${LOGGING:--Dlog4j.configurationFile=file:$JENA_HOME/log4j2.properties}"
 
 # Platform specific fixup
@@ -105,4 +106,10 @@
     JVM_ARGS="$JVM_ARGS -Djava.io.tmpdir=\"$TMP\""
 fi
 
+## Append any custom classpath
+if [ -n "$CLASSPATH" ]
+then
+    JENA_CP="$JENA_CP:$CLASSPATH"
+fi
+
 "$JAVA" $JVM_ARGS $LOGGING -cp "$JENA_CP" riotcmd.turtle "$@" 
diff --git a/apache-jena/bin/uparse b/apache-jena/bin/uparse
index 314ab29..86045e0 100755
--- a/apache-jena/bin/uparse
+++ b/apache-jena/bin/uparse
@@ -87,6 +87,7 @@
 # JVM_ARGS : don't set here but it can be set in the environment.
 # Expand JENA_HOME but literal *
 JENA_CP="$JENA_HOME"'/lib/*'
+
 LOGGING="${LOGGING:--Dlog4j.configurationFile=file:$JENA_HOME/log4j2.properties}"
 
 # Platform specific fixup
@@ -105,4 +106,10 @@
     JVM_ARGS="$JVM_ARGS -Djava.io.tmpdir=\"$TMP\""
 fi
 
+## Append any custom classpath
+if [ -n "$CLASSPATH" ]
+then
+    JENA_CP="$JENA_CP:$CLASSPATH"
+fi
+
 "$JAVA" $JVM_ARGS $LOGGING -cp "$JENA_CP" arq.uparse "$@" 
diff --git a/apache-jena/bin/update b/apache-jena/bin/update
index dbca96a..3a48442 100755
--- a/apache-jena/bin/update
+++ b/apache-jena/bin/update
@@ -87,6 +87,7 @@
 # JVM_ARGS : don't set here but it can be set in the environment.
 # Expand JENA_HOME but literal *
 JENA_CP="$JENA_HOME"'/lib/*'
+
 LOGGING="${LOGGING:--Dlog4j.configurationFile=file:$JENA_HOME/log4j2.properties}"
 
 # Platform specific fixup
@@ -105,4 +106,10 @@
     JVM_ARGS="$JVM_ARGS -Djava.io.tmpdir=\"$TMP\""
 fi
 
+## Append any custom classpath
+if [ -n "$CLASSPATH" ]
+then
+    JENA_CP="$JENA_CP:$CLASSPATH"
+fi
+
 "$JAVA" $JVM_ARGS $LOGGING -cp "$JENA_CP" arq.update "$@" 
diff --git a/apache-jena/bin/utf8 b/apache-jena/bin/utf8
index e4349f1..b9ef488 100755
--- a/apache-jena/bin/utf8
+++ b/apache-jena/bin/utf8
@@ -87,6 +87,7 @@
 # JVM_ARGS : don't set here but it can be set in the environment.
 # Expand JENA_HOME but literal *
 JENA_CP="$JENA_HOME"'/lib/*'
+
 LOGGING="${LOGGING:--Dlog4j.configurationFile=file:$JENA_HOME/log4j2.properties}"
 
 # Platform specific fixup
@@ -105,4 +106,10 @@
     JVM_ARGS="$JVM_ARGS -Djava.io.tmpdir=\"$TMP\""
 fi
 
+## Append any custom classpath
+if [ -n "$CLASSPATH" ]
+then
+    JENA_CP="$JENA_CP:$CLASSPATH"
+fi
+
 "$JAVA" $JVM_ARGS $LOGGING -cp "$JENA_CP" riotcmd.utf8 "$@" 
diff --git a/apache-jena/bin/wwwdec b/apache-jena/bin/wwwdec
index 6efcb4b..c334575 100755
--- a/apache-jena/bin/wwwdec
+++ b/apache-jena/bin/wwwdec
@@ -87,6 +87,7 @@
 # JVM_ARGS : don't set here but it can be set in the environment.
 # Expand JENA_HOME but literal *
 JENA_CP="$JENA_HOME"'/lib/*'
+
 LOGGING="${LOGGING:--Dlog4j.configurationFile=file:$JENA_HOME/log4j2.properties}"
 
 # Platform specific fixup
@@ -105,4 +106,10 @@
     JVM_ARGS="$JVM_ARGS -Djava.io.tmpdir=\"$TMP\""
 fi
 
+## Append any custom classpath
+if [ -n "$CLASSPATH" ]
+then
+    JENA_CP="$JENA_CP:$CLASSPATH"
+fi
+
 "$JAVA" $JVM_ARGS $LOGGING -cp "$JENA_CP" arq.wwwdec "$@" 
diff --git a/apache-jena/bin/wwwenc b/apache-jena/bin/wwwenc
index b69c303..5cb9a38 100755
--- a/apache-jena/bin/wwwenc
+++ b/apache-jena/bin/wwwenc
@@ -87,6 +87,7 @@
 # JVM_ARGS : don't set here but it can be set in the environment.
 # Expand JENA_HOME but literal *
 JENA_CP="$JENA_HOME"'/lib/*'
+
 LOGGING="${LOGGING:--Dlog4j.configurationFile=file:$JENA_HOME/log4j2.properties}"
 
 # Platform specific fixup
@@ -105,4 +106,10 @@
     JVM_ARGS="$JVM_ARGS -Djava.io.tmpdir=\"$TMP\""
 fi
 
+## Append any custom classpath
+if [ -n "$CLASSPATH" ]
+then
+    JENA_CP="$JENA_CP:$CLASSPATH"
+fi
+
 "$JAVA" $JVM_ARGS $LOGGING -cp "$JENA_CP" arq.wwwenc "$@" 
diff --git a/apache-jena/template.bat b/apache-jena/template.bat
index 51a50d7..a3e83d2 100644
--- a/apache-jena/template.bat
+++ b/apache-jena/template.bat
@@ -13,6 +13,10 @@
 set JENA_CP=%JENA_HOME%\lib\*;

 set LOGGING=file:%JENA_HOME%/log4j2.properties

 

+if "%CLASSPATH%" == "" goto :noExtra

+set JENA_CP="%JENA_CP%:%CLASSPATH%"

+:noExtra

+

 @rem JVM_ARGS comes from the environment.

 java %JVM_ARGS% -Dlog4j.configurationFile="%LOGGING%" -cp "%JENA_CP%" JENA_CMD %*

 exit /B

diff --git a/apache-jena/template.bin b/apache-jena/template.bin
index daadfd8..84a99f1 100644
--- a/apache-jena/template.bin
+++ b/apache-jena/template.bin
@@ -87,6 +87,7 @@
 # JVM_ARGS : don't set here but it can be set in the environment.
 # Expand JENA_HOME but literal *
 JENA_CP="$JENA_HOME"'/lib/*'
+
 LOGGING="${LOGGING:--Dlog4j.configurationFile=file:$JENA_HOME/log4j2.properties}"
 
 # Platform specific fixup
@@ -105,4 +106,10 @@
     JVM_ARGS="$JVM_ARGS -Djava.io.tmpdir=\"$TMP\""
 fi
 
+## Append any custom classpath
+if [ -n "$CLASSPATH" ]
+then
+    JENA_CP="$JENA_CP:$CLASSPATH"
+fi
+
 "$JAVA" $JVM_ARGS $LOGGING -cp "$JENA_CP" JENA_CMD "$@" 
diff --git a/jena-arq/Grammar/Final/jj2html_11 b/jena-arq/Grammar/Final/jj2html_11
index f8d7282..a3399c6 100755
--- a/jena-arq/Grammar/Final/jj2html_11
+++ b/jena-arq/Grammar/Final/jj2html_11
@@ -320,7 +320,7 @@
 sub readFile
 {
     my $f = $_[0] ;
-    open(F, "$f") || die "$!"; 
+    open(F, "$f") || die "$f: $!"; 
     my $s = <F> ;
     return $s ;
 }
diff --git a/jena-arq/Grammar/Notes b/jena-arq/Grammar/Notes
index dfb85e2..77dec44 100644
--- a/jena-arq/Grammar/Notes
+++ b/jena-arq/Grammar/Notes
@@ -7,13 +7,16 @@
     cpp input to produce sparql.jj or arq.jj
 
 sparql_11.jj - The SPARQL working group syntax
-    This should be exactly the grammar in the SPARQL rec.
+    This should be exactly the grammar in the SPARQL 1.1 rec.
     Generates org.apache.jena.query.parser.sparql_11.SPARQLParser
 
+sparql_12.jj - The RDF Star working group syntax
+    This should be exactly the grammar in the SPARQL 1.2 rec.
+    Generates org.apache.jena.query.parser.sparql_12.SPARQLParser
+
 arq.jj - The native query language of the query engine
     Generates org.apache.jena.query.parser.arq.ARQParser
 
-
 sparql_10-final.jj - SPARQL 1.0, but updated to match internal chnages in ARQ.
     This should produce the grammar in the SPARQ 1.0/DAWG rec.
     Generates org.apache.jena.query.parser.sparql_10.SPARQLParser
@@ -31,7 +34,7 @@
 
 ==== Making the HTML
 
-sparql_N.txt is produced by "grammar", used to make HTML.
+sparql_N.txt is produced by "grammar", and is used to make HTML.
 We don't use jjdoc to produce HTML but instead get jjdoc to produce
 its text form and process that, toegther with a hand-managed
 token.txt file.
@@ -41,6 +44,6 @@
 Run "jj2tokens sparql_11.jj > tokens.txt" to get a first pass at a tokens file.
 Manually tidy, noting which to inline
 
-Produce HTML suiatble for inclusion in the SPARQL recomendations.
+Produce HTML suitable for inclusion in the SPARQL recomendations.
 Includes some hand-craft tidying up. 
   jj2html arq.txt tokens.txt 
diff --git a/jena-arq/Grammar/Turtle/turtle b/jena-arq/Grammar/Turtle/turtle
index 9df457b..7a38626 100755
--- a/jena-arq/Grammar/Turtle/turtle
+++ b/jena-arq/Grammar/Turtle/turtle
@@ -26,6 +26,9 @@
 RC=$?
 [ "$RC" = 0 ] || exit $RC
 
+## echo "---- Create text form"
+## jjdoc -TEXT=true -OUTPUT_FILE=${FILE%%.jj}.txt "${FILE}"
+ 
 echo "---- Fixing Java warnings in TokenMgrError"
 F="$DIR/TokenMgrError.java"
 if [ -e "$F" ]
diff --git a/jena-arq/Grammar/Turtle/turtle.jj b/jena-arq/Grammar/Turtle/turtle.jj
index 5b4f7db..57296a1 100644
--- a/jena-arq/Grammar/Turtle/turtle.jj
+++ b/jena-arq/Grammar/Turtle/turtle.jj
@@ -142,7 +142,7 @@
 {
   (
     <L_ANN>
-      { Node x = createTripleTerm(s, p, o, token.beginLine, token.beginColumn); }
+      { Node x = createQuotedTriple(s, p, o, token.beginLine, token.beginColumn); }
       PredicateObjectList(x)
     <R_ANN>
   )?
@@ -164,7 +164,7 @@
   |
     s = Collection()
   |
-    s = EmbTriple()
+    s = QuotedTriple()
   )
   { return s ; }
 }
@@ -185,40 +185,39 @@
   | o = Collection()
   | o = BlankNodePropertyList()
   | o = Literal()
-  | o = EmbTriple()
+  | o = QuotedTriple()
   )
   { return o; }
 }
 
-Node EmbSubject(): { Node o ; String iri; }
+Node QuotedTripleSubject(): { Node o ; String iri; }
 {
   ( iri = iri() { o = createURI(iri, token.beginLine, token.beginColumn) ; }
   | o = BlankNode()
-  | o = EmbTriple()
+  | o = QuotedTriple()
   )
   { return o; }
 }
 
-Node EmbObject(): { Node o ; String iri; }
+Node QuotedTripleObject(): { Node o ; String iri; }
 {
   ( iri = iri() { o = createURI(iri, token.beginLine, token.beginColumn) ; }
   | o = BlankNode()
   | o = Literal()
-  | o = EmbTriple()
+  | o = QuotedTriple()
   )
   { return o ; } 
 }
 
 // The syntax for RDF-star <<>>
-Node EmbTriple() : { Node s , p , o ; Token t ; }
+Node QuotedTriple() : { Node s , p , o ; Token t ; }
 {
   t = <LT2>
-    { int beginLine = t.beginLine; int beginColumn = t.beginColumn; t = null; }
-  s = EmbSubject()
+  s = QuotedTripleSubject()
   p = Verb()
-  o = EmbObject()
+  o = QuotedTripleObject()
   <GT2>
-  { Node n = createTripleTerm(s, p, o, beginLine, beginColumn);
+  { Node n = createQuotedTriple(s, p, o, t.beginLine, t.beginColumn);
     return n;
   }
 }
diff --git a/jena-arq/Grammar/arq.jj b/jena-arq/Grammar/arq.jj
index 68a5e4c..2432ac5 100644
--- a/jena-arq/Grammar/arq.jj
+++ b/jena-arq/Grammar/arq.jj
@@ -729,13 +729,12 @@
 }
 Node DataBlockValue() : { Node n ; String iri ; }
 {
-  n = TripleTermData() { return n ; }
-|
   iri = iri() { return createNode(iri) ; }
 | n = RDFLiteral() { return n ; }
 | n = NumericLiteral() { return n ; }
 | n = BooleanLiteral() { return n ; }
 | <UNDEF> { return null ; }
+| n = QuotedTripleData() { return n ; }
 }
 Element Assignment() : { Var v ; Expr expr ; }
 {
@@ -1163,7 +1162,7 @@
   (
     <L_ANN>
       { Node pAnn = preConditionAnnotation(s, p, path, o, token.beginLine, token.beginColumn) ;
-        Node x = createTripleTerm(s, pAnn, o, token.beginLine, token.beginColumn);
+        Node x = createQuotedTriple(s, pAnn, o, token.beginLine, token.beginColumn);
       }
       PropertyListPathNotEmpty(x, acc)
     <R_ANN>
@@ -1174,7 +1173,7 @@
   (
     <L_ANN>
       { Node pAnn = preConditionAnnotation(s, p, path, o, token.beginLine, token.beginColumn) ;
-        Node x = createTripleTerm(s, p, o, token.beginLine, token.beginColumn);
+        Node x = createQuotedTriple(s, p, o, token.beginLine, token.beginColumn);
       }
       PropertyListNotEmpty(x, acc)
     <R_ANN>
@@ -1192,31 +1191,36 @@
  |
   n = TriplesNodePath(acc) { return n ; }
 }
-Node VarOrTerm() : { Node n = null ; }
+Node VarOrTerm() : { Node n = null ; String iri ; }
 {
-  ( n = TripleTerm()
-  | n = Var()
-  | n = GraphTerm()
-  )
+  ( n = Var()
+  | iri = iri() { return createNode(iri) ; }
+  | n = RDFLiteral() { return n ; }
+  | n = NumericLiteral() { return n ; }
+  | n = BooleanLiteral() { return n ; }
+  | n = BlankNode() { return n ; }
+  | <NIL> { return nRDFnil ; }
+  | n = QuotedTriple()
+)
   { return n ; }
 }
-Node TripleTerm() : { Node n = null ; Token t ; Node s , p , o ; }
+Node QuotedTriple() : { Node n = null ; Token t ; Node s , p , o ; }
 {
   t = <LT2>
   s = VarOrTerm()
   p = Verb()
   o = VarOrTerm()
-  { n = createTripleTerm(s, p, o, t.beginLine, t.beginColumn); }
+  { n = createQuotedTriple(s, p, o, t.beginLine, t.beginColumn); }
   <GT2>
   { return n; }
 }
-Node TripleTermData() : { Node n = null ; Token t ; String iri ; Node s , p , o ; }
+Node QuotedTripleData() : { Node n = null ; Token t ; String iri ; Node s , p , o ; }
 {
   t = <LT2>
   ( s = DataValueTerm() )
   ( iri = iri() { p = createNode(iri) ; } | <KW_A> { p = nRDFtype ; } )
   ( o = DataValueTerm() )
-  { n = createTripleTerm(s, p, o, t.beginLine, t.beginColumn); }
+  { n = createQuotedTriple(s, p, o, t.beginLine, t.beginColumn); }
   <GT2>
   { return n; }
 }
@@ -1226,7 +1230,7 @@
 | n = RDFLiteral() { return n ; }
 | n = NumericLiteral() { return n ; }
 | n = BooleanLiteral() { return n ; }
-| n = TripleTermData() { return n ; }
+| n = QuotedTripleData() { return n ; }
 }
 Node VarOrIri() : {Node n = null ; String iri ; }
 {
@@ -1243,15 +1247,6 @@
     ( t = <VAR1> | t = <VAR2> )
     { return createVariable(t.image, t.beginLine, t.beginColumn) ; }
 }
-Node GraphTerm() : { Node n ; String iri ; }
-{
-  iri = iri() { return createNode(iri) ; }
-| n = RDFLiteral() { return n ; }
-| n = NumericLiteral() { return n ; }
-| n = BooleanLiteral() { return n ; }
-| n = BlankNode() { return n ; }
-| <NIL> { return nRDFnil ; }
-}
 Expr Expression() : { Expr expr ; }
 {
   expr = ConditionalOrExpression()
@@ -1373,7 +1368,7 @@
   | n = NumericLiteral() { return asExpr(n) ; }
   | n = BooleanLiteral() { return asExpr(n) ; }
   | n = Var() { return asExpr(n) ; }
-  | n = ExprTripleTerm() { return asExpr(n) ; }
+  | n = ExprQuotedTriple() { return asExpr(n) ; }
   )
 }
 Node ExprVarOrTerm() : { Node n; String s;}
@@ -1383,16 +1378,16 @@
   | n = NumericLiteral()
   | n = BooleanLiteral()
   | n = Var()
-  | n = ExprTripleTerm()
+  | n = ExprQuotedTriple()
   )
   { return n; }
 }
-Node ExprTripleTerm() : { Token t ; Node s,p,o,n; }
+Node ExprQuotedTriple() : { Token t ; Node s,p,o,n; }
 { t = <LT2>
   s = ExprVarOrTerm()
   p = Verb()
   o = ExprVarOrTerm()
-  { n = createTripleTerm(s, p, o, t.beginLine, t.beginColumn); }
+  { n = createQuotedTriple(s, p, o, t.beginLine, t.beginColumn); }
   <GT2>
   { return n; }
 }
@@ -1504,7 +1499,7 @@
     expr = RegexExpression() { return expr ; }
   | expr = ExistsFunc() { return expr ; }
   | expr = NotExistsFunc() { return expr ; }
-  | <IS_TRIPLE> <LPAREN> expr = Expression() <RPAREN>
+| <IS_TRIPLE> <LPAREN> expr = Expression() <RPAREN>
     { return new E_IsTriple(expr) ; }
   | <TRIPLE> <LPAREN> expr1 = Expression() <COMMA> expr2 = Expression() <COMMA> expr3 = Expression() <RPAREN>
     { return new E_TripleFn(expr1, expr2, expr3) ; }
@@ -1789,12 +1784,12 @@
 | < BIND: "bind" >
 | < SERVICE: "service" >
 | < LET: "LET" >
+| < LATERAL: "LATERAL" >
 | < TRIPLE: "TRIPLE" >
 | < IS_TRIPLE: "isTRIPLE" >
 | < SUBJECT: "SUBJECT" >
 | < PREDICATE: "PREDICATE" >
 | < OBJECT: "OBJECT" >
-| < LATERAL: "LATERAL" >
 | < EXISTS: "exists" >
 | < NOT: "not" >
 | < AS: "as" >
diff --git a/jena-arq/Grammar/grammar b/jena-arq/Grammar/grammar
index c20b474..08e07f7 100755
--- a/jena-arq/Grammar/grammar
+++ b/jena-arq/Grammar/grammar
@@ -35,7 +35,7 @@
     (cd "$DIR" ; rm -f TokenMgrError.java ParseException.java Token.java JavaCharStream.java )
 
     echo "---- Process grammar -- $1"
-    javacc -OUTPUT_DIRECTORY=$DIR  -JDK_VERSION=1.7 "${FILE}"
+    javacc -OUTPUT_DIRECTORY=$DIR  -JDK_VERSION=1.8 "${FILE}"
     RC=$?
 
     [ "$RC" = 0 ] || return
diff --git a/jena-arq/Grammar/jj2html b/jena-arq/Grammar/jj2html
index a3399c6..245506d 100755
--- a/jena-arq/Grammar/jj2html
+++ b/jena-arq/Grammar/jj2html
@@ -70,8 +70,7 @@
 # Grammar rules
 # Direct from "jjdoc -TEXT=true"
 
-for $g (@g)
-{
+for $g (@g) {
     ($rulename, $rulebody) = split(/:=/,$g) ;
 
     $rulename =~ s!^\s*!! ;
@@ -79,23 +78,12 @@
 
     $rulebody =~ s!^\s*!! ;
     $rulebody =~ s!\s*$!! ;
+
     
     # Remove outer brackets
 #    $rulebody =~ s!^\((.*)\)$!$1! ;
 
-    # Remove <> around tokens in grammar.
-    ## Now done very late (as &lt;&gt;) in fixups.
-    ## $rulebody =~ s/\<(\w+)\>/$1/g ;
-    # Leave in - so tokens distinguished from rules
-
     next if $rulename eq '' ;
-    #next if $rulebody eq '' ;
-
-    # Skip the root rule.
-    next if ( $rulename eq 'CompilationUnit' ) ;
-
-    $rulebody = 'Perl 5 regular expression'
-	if ( $rulename eq 'PatternLiteral' ) ;
 
     push @rules, $rulename ;
     warn "Duplicate rule (grammar): $rulename\n" if defined($ruleMap{$rulename}) ;
@@ -104,7 +92,6 @@
 ##     print "----------\n" ;
 ##     print $rulename,"\n" ;
 ##     print $rulebody,"\n" ;
-
 }
 
 
@@ -117,53 +104,36 @@
 
 @t = split(/\n(?=\<|\[)/, $tokens) ;
 
-for $t (@t)
-{
+for $t (@t) {
     ($tokenname,$tokenbody) = split(/::=/, $t) ;
     $tokenname =~ s!^\s*!! ;
     $tokenname =~ s!\s*$!! ;
-
-##     # remove <> around tokens
-## Do very late as a formatting fix up.
-##     $tokenname =~ s/^\<// ;
-##     $tokenname =~ s/\>$// ;
-
     $tokenname =~ s/#// ;
-    
+
     $tokenbody =~ s!^\s*!! ;
     $tokenbody =~ s!\s*$!! ;
-    
-    # <> round tokens
-    # Remove at last minute.
-
-    # Remove outer ()
-    # $tokenbody =~ s!^\((.*)\)$!$1! ;
 
     # Inline?
-    if ( $tokenname =~ /^\[\<\w*\>\]/ )
-    {
+    if ( $tokenname =~ /^\[\<\w*\>\]/ ) {
 	warn "Duplicate inline (token): $tokenname\n" if defined($inline{$tokenname}) ;
 	$tokenname =~ s/^\[//g ;
 	$tokenname =~ s/\]$//g ;
 	$tokenbody =~ s/"/'/g ; # '" -- But not literal " -- how?
         $tokenbody =~ s/\<\>\'\{\}/\<\>\"\{\}/ ; # '" IRI fixup
-
 	$inline{$tokenname} = $tokenbody ;
 
 	#print "INLINE: ",$tokenname," => ",$tokenbody,"\n" ;
-    }
-    else
-    {
+    } else {
 	push @rules, $tokenname ;
 	warn "Duplicate rule (token): $tokenname\n" if defined($tokenMap{$tokenname}) ;
 	$ruleMap{$tokenname} = $tokenbody ; 
     }
+    
 }
 
 # Table
 
-if ( ! $TABLE )
-{
+if ( ! $TABLE ) {
     print "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n" ;
     print "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Strict//EN\"\n" ;
     print "    \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd\">\n" ;
@@ -194,15 +164,17 @@
      print "<body>\n";
 
     print "\n" ;
-}
+} ## End TABLE
 
-print "<div class=\"grammarTable\">\n" ;
-print "  <table><tbody>\n" ;
+$indent = "        ";
+## $indent = "";
+
+print $indent,"<div class=\"grammarTable\">\n" ;
+print $indent,"  <table><tbody>\n" ;
 
 $ruleNum = 0 ;
 
-for $r (@rules)
-{
+for $r (@rules) {
     $DEBUG = 0 ;
     $ruleNum++ ;
     $rulename = $r ;
@@ -211,45 +183,35 @@
 
 ##    $DEBUG = 1 if ( $rulename =~ /Prolog/ ) ;
 
-    $rb = $rulebody ;
 
-    if ( $DEBUG )
-    {
+    if ( $DEBUG ) {
 	print STDERR "\n" ;
 	print STDERR "Rule: $rulename\n" ; 
 	print STDERR "Body: $rulebody\n" ; 
     }
 
-    ## Do before '||' substitution
-    # Not perfect - some fixups later.
-    #$rb =~ s%\|%\<br/\>\|%g ;
-
+    $ruleBodyStr = $rulebody ;
     # Escape HTML chars before adding markup.
-    $rb = esc($rb) ;
+    $ruleBodyStr = esc($ruleBodyStr) ;
     
     # Inlines
-    for $k (keys %inline)
-    {
-	$s = span('token', $inline{$k}) ;
+    for $k (keys %inline) {
+	$s = '<span class="token">' . esc($inline{$k}) . '</span>' ;
 	$k = esc($k) ;
 	# Assumes escaped <> round tokens.
 	$k = quotemeta $k ;
-	$rb =~ s/$k/$s/g ;
-
+	$ruleBodyStr =~ s/$k/$s/g ;
     }
 
-    if ( $DEBUG )
-    {
+    if ( $DEBUG ) {
 	print STDERR "After inlining\n" ;
-	print STDERR $rb,"\n" ; ; 
+	print STDERR $ruleBodyStr,"\n" ; ; 
     }
 
-
     # Add hrefs - issue if one is a substring of another \W helps.
 
-    for $k (keys %ruleMap)
-    {
-	$s = href("r-".$k,$k) ;
+    for $k (keys %ruleMap) {
+	$s = '<a href="#r' . sane($k) . '">' . esc($k) . '</a>' ;
 
 	$k = esc($k) ;
 	$k = quotemeta $k ;
@@ -260,73 +222,75 @@
 ## 	}
 
 
-	$rb =~ s/(?=\W)(\s*)$k(\s*)(?=\W)/$1$s$2/g ;
-	$rb =~ s/^$k(\s*)(?=\W)/$s$1/g ;
-	$rb =~ s/(?=\W)(\s*)$k$/$1$s/g ;
-	$rb =~ s/^$k$/$s/g ;
+	$ruleBodyStr =~ s/(?=\W)(\s*)$k(\s*)(?=\W)/$1$s$2/g ;
+	$ruleBodyStr =~ s/^$k(\s*)(?=\W)/$s$1/g ;
+	$ruleBodyStr =~ s/(?=\W)(\s*)$k$/$1$s/g ;
+	$ruleBodyStr =~ s/^$k$/$s/g ;
     }
     
-    if ( $DEBUG )
-    {
+    if ( $DEBUG ) {
 	print STDERR "After hrefs\n" ;
-	print STDERR $rb,"\n" ; ; 
+	print STDERR $ruleBodyStr,"\n" ; ; 
     }
 
     #exit if $ruleNum > 2 ;
 
-    $rn = anchor("r-".$rulename, $rulename) ;
-    $rn = fixupHead($rn) ;
+    $ruleId = sane("r".$rulename) ;
 
-    if($rulename eq 'IRIREF') 
-    {
-	print "  </tbody></table>\n" ;
-	print "</div>\n" ;
-	print "<p>Productions for terminals:</p>\n" ;
-	print "<div class=\"grammarTable\">\n" ;
-	print "  <table><tbody>\n" ;
+    if($rulename eq 'IRIREF') {
+	print $indent,"  </tbody></table>\n" ;
+	print $indent,"</div>\n" ;
+	print $indent,"<p>Productions for terminals:</p>\n" ;
+	print $indent,"<div class=\"grammarTable\">\n" ;
+	print $indent,"  <table><tbody>\n" ;
     }
 
-
     print "\n" ;
-    print "<tr valign=\"baseline\">\n" ;
+    $indentRule = "              ";
+    ##$indentRule = "";
+    print $indentRule,"<tr style=\"vertical-align: baseline\">\n";
+    
     $rlabel = '[' . $ruleNum .  ']&nbsp;&nbsp;' ;
 
-    print "  <td>",code('gRuleLabel', $rlabel),"</td>\n" ;
+    print $indentRule,"  <td><code>",$rlabel,"</code></td>\n" ;
 
-    #print "  <td>",span('gRuleHead', $rn),"</td>\n" ;
-    print "  <td>",code('gRuleHead',$rn),"</td>\n" ;
-
-    print "  <td>&nbsp;&nbsp;::=&nbsp;&nbsp;</td>\n" ;
+    $rn = $rulename;
+    $rn =~ s!^<!!; 
+    $rn =~ s!>$!!; 
     
-    $rb = fixupRule($rulename, $rb) ;
-    print "  <td>",code('gRuleBody',$rb),"</td>\n" ;
+    print $indentRule,
+	'  <td><code><span class="doc-ref" id="',$ruleId,'">',
+	esc($rn),
+	'</span></code></td>',"\n";
+    
+    print $indentRule,"  <td>&nbsp;&nbsp;::=&nbsp;&nbsp;</td>\n" ;
+    
+    $ruleBodyStr = fixupRule($rulename, $ruleBodyStr) ;
+    print $indentRule,"  <td>",code('gRuleBody',$ruleBodyStr),"</td>\n" ;
 
-    print "</tr>\n" ;
+    print $indentRule,"</tr>\n" ;
 
 #    $rule{$rulename, $rulebody) ;
 #    print $rulename , "\n" ;
 }
 
-print "  </tbody></table>\n" ;
-print "</div>\n" ;
+print $indent,"  </tbody></table>\n" ;
+print $indent,"</div>\n" ;
 
-if ( !$TABLE )
-{
+if ( !$TABLE ) {
     print "\n" ;
     print "</body>\n" ;
     print "</html>\n" ;
 }
 
-sub readFile
-{
+sub readFile {
     my $f = $_[0] ;
     open(F, "$f") || die "$f: $!"; 
     my $s = <F> ;
     return $s ;
 }
 
-sub esc
-{
+sub esc {
     my $s = $_[0] ;
     $s =~ s/&/&amp;/g ; 
     $s =~ s/</&lt;/g ; 
@@ -334,79 +298,32 @@
     return $s ;
 }
 
-sub span
-{
-    my $c = $_[0] ;
-    my $t = $_[1] ;
-    $t = esc($t) ;
-    my $s = '<span class="' . $c . '">' . $t . '</span>' ;
-    return $s ;
-}
-
-sub href
-{
-    my $a = $_[0] ;
-    my $t = $_[1] ;
-    $a = sane($a) ;
-    $t = esc($t) ;
-    my $s = '<a href="#' . $a . '">' . $t . '</a>' ;
-    return $s ;
-}
-
-sub anchor
-{
-    my $a = $_[0] ;
-    my $t = $_[1] ;
-    $a = sane($a) ;
-    $t = esc($t) ;
-    my $s = '<a id="' . $a . '" name="' . $a . '">' . $t . '</a>' ;
-    return $s ;
-}
-
-sub sane
-{
+sub sane {
    my $a = $_[0] ;
    $a =~ s/\W//g ;
    return $a ;
 }
 
-sub code
-{
+sub code {
     my $c = $_[0] ;
     my $t = $_[1] ;
     return '<code class="' . $c . '">' . $t . '</code>' ;
 }
 
-sub fixupHead
-{
+sub fixupHead {
     my $head = $_[0] ;
     # Remove <> around tokens.
     $head =~ s/&lt;(\w+)&gt;/$1/g ;
     return $head ;
 }
 
-sub fixupRule
-{
+sub fixupRule {
     my $head = $_[0] ;
     my $body = $_[1] ;
 
     # Remove unnecessary ()
     $body =~ s/\(\s*([^()| ]*) \)/$1/g ;
 
-##     if ( $body =~ m!\(\s+(\<a[^>]*\>[^<>]*\</a\>)\s+\)! )
-##     {
-## 	$b = $body ;
-## 	print "================================\n" ;
-## 	print STDERR "$b\n" ;
-## 	print STDERR "--------\n" ;
-## 	$b =~ s!\(\s+(\<a[^>]*\>[^<>]*\</a\>)\s+\)!$1!g ;
-## 	$b =~ s!\(\s+(\<span[^>]*\>[^<>]*\</span\>)\s+\)!$1!g ;
-## 	print STDERR "$b\n" ;
-## 	print STDERR "=====\n" ;
-## 	print STDERR "\n" ;
-##     }
-
-
     # Remove outer matching () where there are no inner ()
     $body =~ s/^\(\s+([^\(]*)\s+\)$/$1/ ;
 
@@ -451,13 +368,13 @@
 	$body =~ s%\<br/\>\| *\<a href="#rNIL"\>NIL\</a\>%\| \<a href="#rNIL"\>NIL\</a\>%g ;
     }
 
-    if ( $head eq "RelationalExpression" ||
-	 $head eq "AdditiveExpression" ||
-	 $head eq "MultiplicativeExpression" ||
-	 $head eq "ConditionalOrExpression")
-    {
-	$body =~ s%\*\(%<br/>\(% ;
-    }
+##     if ( $head eq "RelationalExpression" ||
+## 	 $head eq "AdditiveExpression" ||
+## 	 $head eq "MultiplicativeExpression" ||
+## 	 $head eq "ConditionalOrExpression")
+##     {
+## 	$body =~ s%\*\(%<br/>\(% ;
+##     }
 
     # These failed the outer () test because they have nested () in them
     if (  $head eq "QueryPattern" ||
diff --git a/jena-arq/Grammar/main.jj b/jena-arq/Grammar/main.jj
index 8e56d4f..757e005 100644
--- a/jena-arq/Grammar/main.jj
+++ b/jena-arq/Grammar/main.jj
@@ -21,7 +21,6 @@
 // (Run through cpp -P -C first)
 #endif
 
-
 #if !defined(ARQ) && !defined(SPARQL_12)
 #error Please define one of ARQ and SPARQL_12
 #endif
@@ -42,14 +41,12 @@
 #define PACKAGE     lang.sparql_12
 #define CLASS       SPARQLParser12
 #define PARSERBASE  SPARQLParser12Base
-#define UPDATE
 #endif
 
 #ifdef ARQ
 #define PACKAGE     lang.arq
 #define CLASS       ARQParser
 #define PARSERBASE  ARQParserBase
-#define UPDATE
 #endif
 
 options
@@ -100,11 +97,10 @@
 import org.apache.jena.sparql.expr.* ;
 import org.apache.jena.sparql.path.* ;
 import org.apache.jena.sparql.expr.aggregate.* ;
-#ifdef  UPDATE
 import org.apache.jena.sparql.expr.aggregate.lib.* ;
 import org.apache.jena.update.* ;
 import org.apache.jena.sparql.modify.request.* ;
-#endif
+
 #ifdef ARQ
 import org.apache.jena.sparql.core.Quad ;
 import java.util.List;
@@ -125,7 +121,9 @@
 // Query only entry point
 void QueryUnit(): { }
 {
+#ifdef ARQ
   ByteOrderMark()
+#endif
   { startQuery() ; }
   Query() <EOF>
   { finishQuery() ; }
@@ -142,21 +140,23 @@
   ValuesClause()
 }
 
-#ifdef UPDATE
 void UpdateUnit() : {}
 {
+#ifdef ARQ
   ByteOrderMark()
+#endif
   { startUpdateRequest() ; }
   Update()
   <EOF>
   { finishUpdateRequest() ; }
 }
-#endif
 
+#ifdef ARQ
 void ByteOrderMark() : {}
 {
    (<BOM>)?
 }
+#endif
 
 void Prologue() : {}
 {
@@ -245,6 +245,7 @@
 }
 
 #ifdef ARQ
+// Allows quads
 void ConstructQuery() : { Template t ; 
                           QuadAcc acc = new QuadAcc() ; }
 {
@@ -263,7 +264,7 @@
     <WHERE>
     // Should have been "ConstructTemplate()"
     <LBRACE>  
-    ConstructQuads(acc)
+    ConstructQuads(acc) // Quads
     <RBRACE>
     SolutionModifier()
     { 
@@ -276,7 +277,6 @@
  )
 }
 #else
-// Complete compatibility - this differs from the above at "new Template"
 void ConstructQuery() : { Template t ; 
                           TripleCollectorBGP acc = new TripleCollectorBGP() ; }
 {
@@ -295,7 +295,7 @@
     <WHERE>
     // Should have been "ConstructTemplate()"
     <LBRACE>  
-    (TriplesTemplate(acc))?
+    (TriplesTemplate(acc))? // triples
     <RBRACE>
     SolutionModifier()
     { 
@@ -514,10 +514,6 @@
   )?
 }
 
-#ifdef UPDATE
-// SPARQL Update + transitional extensions for SPARQL/Update (the W3C submission)
-// Update only entry point
-
 #ifdef ARQ
 void Update() : { }
 {
@@ -816,8 +812,6 @@
 #endif
 }
 
-#endif
-
 // ---- General Graph Pattern 
 
 Element GroupGraphPattern() : { Element el = null ; Token t ; }
@@ -1022,15 +1016,13 @@
 
 Node DataBlockValue() : { Node n ; String iri ; }
 {
-#ifdef ARQ
-  n = TripleTermData()      { return n ; }
-|
-#endif
   iri = iri()           { return createNode(iri) ; }
 | n = RDFLiteral()      { return n ; }
 | n = NumericLiteral()  { return n ; }
 | n = BooleanLiteral()  { return n ; }
 | <UNDEF>               { return null ; }
+| n = QuotedTripleData()      { return n ; }
+
 }
 
 #ifdef ARQ
@@ -1261,9 +1253,7 @@
   { ElementPathBlock tempAcc = new ElementPathBlock() ; int mark = tempAcc.mark() ; }
   o = GraphNode(tempAcc) 
   { insert(tempAcc, mark, s, p, path, o) ;  insert(acc, tempAcc) ; }
-#ifdef ARQ  
   Annotation(acc, s, p, path, o)
-#endif
 }
 
 // -------- BGPs with paths.
@@ -1333,9 +1323,7 @@
   { ElementPathBlock tempAcc = new ElementPathBlock() ; int mark = tempAcc.mark() ; }
   o = GraphNodePath(tempAcc) 
   { insert(tempAcc, mark, s, p, path, o) ;  insert(acc, tempAcc) ; }
-#ifdef ARQ
   AnnotationPath(acc, s, p, path, o)
-#endif
 }
 
 // End paths stuff.
@@ -1624,14 +1612,13 @@
      return listHead ; }
 }
 
-#ifdef ARQ
 // RDF-star Annotation Syntax
 void AnnotationPath(TripleCollector acc, Node s, Node p, Path path, Node o) : {}
 {
   (
     <L_ANN>
       { Node pAnn = preConditionAnnotation(s, p, path, o, token.beginLine, token.beginColumn) ;
-        Node x = createTripleTerm(s, pAnn, o, token.beginLine, token.beginColumn);
+        Node x = createQuotedTriple(s, pAnn, o, token.beginLine, token.beginColumn);
       }
       PropertyListPathNotEmpty(x, acc)
     <R_ANN>
@@ -1645,13 +1632,12 @@
   (
     <L_ANN>
       { Node pAnn = preConditionAnnotation(s, p, path, o, token.beginLine, token.beginColumn) ;
-        Node x = createTripleTerm(s, p, o, token.beginLine, token.beginColumn);
+        Node x = createQuotedTriple(s, p, o, token.beginLine, token.beginColumn);
       }
       PropertyListNotEmpty(x, acc)
     <R_ANN>
   )?
 }
-#endif
 
 // -------- Nodes in a graph pattern or template
 
@@ -1669,42 +1655,39 @@
   n = TriplesNodePath(acc) { return n ; }
 }
 
-#ifdef SPARQL_12
-Node VarOrTerm() : {Node n = null ; }
+Node VarOrTerm() : { Node n = null ; String iri ; }
 {
-  ( n = Var() | n = GraphTerm() )
-  { return n ; }
-}
-#endif
-#ifdef ARQ
-// RDF-star Triple as term.
-Node VarOrTerm() : { Node n = null ; }
-{
-  ( n = TripleTerm()
-  | n = Var()
-  | n = GraphTerm()
-  )
+  ( n = Var()
+  | iri = iri()           { return createNode(iri) ; }
+  | n = RDFLiteral()      { return n ; }
+  | n = NumericLiteral()  { return n ; }
+  | n = BooleanLiteral()  { return n ; }
+  | n = BlankNode()       { return n ; }
+  //  <LPAREN> <RPAREN>     { return nRDFnil ; }
+  | <NIL>  { return nRDFnil ; }
+  | n = QuotedTriple()
+)
   { return n ; }
 }
 
-Node TripleTerm() :  { Node n = null ; Token t ; Node s , p , o ; }
+Node QuotedTriple() :  { Node n = null ; Token t ; Node s , p , o ; }
 {
   t = <LT2>
   s = VarOrTerm()
   p = Verb()
   o = VarOrTerm()
-  { n = createTripleTerm(s, p, o, t.beginLine, t.beginColumn); }
+  { n = createQuotedTriple(s, p, o, t.beginLine, t.beginColumn); }
   <GT2>
   { return n; }
 }
 
-Node TripleTermData() :  { Node n = null ; Token t ; String iri ; Node s , p , o ; }
+Node QuotedTripleData() :  { Node n = null ; Token t ; String iri ; Node s , p , o ; }
 {
   t = <LT2>
   ( s = DataValueTerm() )
   ( iri = iri() { p = createNode(iri) ; } | <KW_A> { p = nRDFtype ; } )
   ( o = DataValueTerm() )
-  { n = createTripleTerm(s, p, o, t.beginLine, t.beginColumn); }
+  { n = createQuotedTriple(s, p, o, t.beginLine, t.beginColumn); }
   <GT2>
   { return n; }
 }
@@ -1715,11 +1698,9 @@
 | n = RDFLiteral()      { return n ; }
 | n = NumericLiteral()  { return n ; }
 | n = BooleanLiteral()  { return n ; }
-| n = TripleTermData()  { return n ; }
+| n = QuotedTripleData()  { return n ; }
 }
 
-#endif
-
 // e.g. Property (if no bNodes) + DESCRIBE
 Node VarOrIri() : {Node n = null ; String iri ; }
 {
@@ -1728,11 +1709,13 @@
 }
 
 // e.g. INSERT DATA { GRAPH ... }
+#ifdef ARQ
 Node VarOrBlankNodeOrIri() : {Node n = null ; String iri ; }
 {
   ( n = Var() | n = BlankNode() | iri = iri() { n = createNode(iri) ; } )
   { return n ; }
 }
+#endif
 
 Var Var() : { Token t ;}
 {
@@ -1740,17 +1723,6 @@
     { return createVariable(t.image, t.beginLine, t.beginColumn) ; }
 }
 
-Node GraphTerm() : { Node n ; String iri ; }
-{
-  iri = iri()        { return createNode(iri) ; }
-| n = RDFLiteral()      { return n ; }
-| n = NumericLiteral()  { return n ; }
-| n = BooleanLiteral()  { return n ; }
-| n = BlankNode()       { return n ; }   
-  //  <LPAREN> <RPAREN>     { return nRDFnil ; }
-| <NIL>  { return nRDFnil ; }
-}
-
 // -------- Constraint syntax
 
 Expr Expression() : { Expr expr ; }
@@ -1879,22 +1851,6 @@
   | expr = PrimaryExpression() { return expr ; }
 }
 
-#ifndef ARQ
-Expr PrimaryExpression() : { Expr expr ; Node n ; }
-{
-  ( expr = BrackettedExpression() { return expr ; }
-  | expr = BuiltInCall() { return expr ; }  
-  | expr = iriOrFunction()  { return expr ; }
-// NOT  | n = VarOrTerm()           { return asExpr(n) ; }
-// Because of iriOrFunction 
-  | n = RDFLiteral()      { return asExpr(n) ; }
-  | n = NumericLiteral()  { return asExpr(n) ; }
-  | n = BooleanLiteral()  { return asExpr(n) ; }
-  | n = Var()             { return asExpr(n) ; }
-  )
-}
-#endif
-#ifdef ARQ
 Expr PrimaryExpression() : { Expr expr ; Node n ; }
 {
   ( expr = BrackettedExpression() { return expr ; }
@@ -1907,7 +1863,8 @@
   | n = NumericLiteral()  { return asExpr(n) ; }
   | n = BooleanLiteral()  { return asExpr(n) ; }
   | n = Var()             { return asExpr(n) ; }
-  | n = ExprTripleTerm()  { return asExpr(n) ; }
+  | n = ExprQuotedTriple()  { return asExpr(n) ; }
+
 // and not SPARQL 12
 // needs checking.
 // Use this for ?var(args)
@@ -1922,22 +1879,20 @@
   | n = NumericLiteral()
   | n = BooleanLiteral()
   | n = Var()
-  | n = ExprTripleTerm()
+  | n = ExprQuotedTriple()
   )
   { return n; }
 }
 
-// Embedded triple in expressions
-Node ExprTripleTerm() : { Token t ; Node s,p,o,n; }
+Node ExprQuotedTriple() : { Token t ; Node s,p,o,n; }
 { t = <LT2>
   s = ExprVarOrTerm()
   p = Verb()
   o = ExprVarOrTerm()
-  { n = createTripleTerm(s, p, o, t.beginLine, t.beginColumn); }
+  { n = createQuotedTriple(s, p, o, t.beginLine, t.beginColumn); }
   <GT2>
   { return n; }
 }
-#endif
 
 Expr BrackettedExpression() : { Expr expr ; }
 {
@@ -2128,8 +2083,8 @@
   | expr = ExistsFunc()      { return expr ; }
 
   | expr = NotExistsFunc()   { return expr ; }
-#if ARQ
-  | <IS_TRIPLE>  <LPAREN> expr = Expression() <RPAREN>
+
+| <IS_TRIPLE>  <LPAREN> expr = Expression() <RPAREN>
     { return new E_IsTriple(expr) ; }
 
   | <TRIPLE>  <LPAREN> expr1 = Expression() <COMMA> expr2 = Expression() <COMMA> expr3 = Expression() <RPAREN>
@@ -2143,7 +2098,6 @@
 
   | <OBJECT>  <LPAREN> expr = Expression() <RPAREN>
     { return new E_TripleObject(expr) ; }
-#endif
 }
 
 Expr RegexExpression() :
@@ -2468,8 +2422,10 @@
 |
   // Whitespace or comment.
   <#WSC: <WS> | <SINGLE_LINE_COMMENT> >
+#ifdef ARQ
 |
   <BOM:    "\uFEFF">
+#endif
 }
 
 // Main tokens */
@@ -2542,16 +2498,17 @@
 
 #ifdef ARQ
 |  < LET:         "LET" >
+|  < LATERAL:     "LATERAL" >
+#endif
+
 |  < TRIPLE:      "TRIPLE" >
 |  < IS_TRIPLE:   "isTRIPLE" >
 |  < SUBJECT:     "SUBJECT" >
 |  < PREDICATE:   "PREDICATE" >
 |  < OBJECT:      "OBJECT" >
-|  < LATERAL:     "LATERAL" >
-#endif
+
 |  < EXISTS:      "exists" >
 |  < NOT:         "not" >
-//|  < UNSAID:      "unsaid" >
 |  < AS:          "as" >
 |  < GROUP:       "group" >
 |  < HAVING:      "having" >
@@ -2659,7 +2616,6 @@
 |  < FALSE:       "false" >
 }
 
-#if defined(UPDATE)
 // SPARQL/Update parts.
 
 TOKEN [IGNORE_CASE] :
@@ -2693,7 +2649,6 @@
 //| < COMMIT:      "commit" >
 //| < ABORT:       "abort" >
 }
-#endif
 
 // -------------------------------------------------
 
@@ -2779,12 +2734,10 @@
 | < LE:      "<=" >    // Maybe: | "=>" >
 | < GE:      ">=" >    // Maybe: | "=<" >
 
-#ifdef ARQ
 | < GT2:     ">>" >
 | < LT2:     "<<" >
 | <L_ANN:    "{|" >
 | <R_ANN:    "|}" >
-#endif
 
 | < BANG:    "!" >
 | < TILDE:   "~" >
diff --git a/jena-arq/Grammar/sparql2html b/jena-arq/Grammar/sparql2html
index a79cf32..19320cd 100755
--- a/jena-arq/Grammar/sparql2html
+++ b/jena-arq/Grammar/sparql2html
@@ -4,7 +4,10 @@
 ##jj2html 'sparql_11.txt' 'tokens.txt' > X11.html
 ##grammarExtracts < X11.html > Y11.html
 
-jj2html 'arq.txt' 'tokens.txt' > X.html
-grammarExtracts < X.html > Y.html
+jj2html 'sparql_12.txt' 'tokens.txt' > X12.html
+grammarExtracts < X12.html > Y12.html
+
+## jj2html 'arq_12.txt' 'tokens.txt' > X.html
+## grammarExtracts < X.html > Y.html
 
 echo "Check X and Y for IRI_REF because \" became '"
\ No newline at end of file
diff --git a/jena-arq/Grammar/sparql_12.jj b/jena-arq/Grammar/sparql_12.jj
index c1af2dc..0073d78 100644
--- a/jena-arq/Grammar/sparql_12.jj
+++ b/jena-arq/Grammar/sparql_12.jj
@@ -39,7 +39,6 @@
 PARSER_END(SPARQLParser12)
 void QueryUnit(): { }
 {
-  ByteOrderMark()
   { startQuery() ; }
   Query() <EOF>
   { finishQuery() ; }
@@ -53,16 +52,11 @@
 }
 void UpdateUnit() : {}
 {
-  ByteOrderMark()
   { startUpdateRequest() ; }
   Update()
   <EOF>
   { finishUpdateRequest() ; }
 }
-void ByteOrderMark() : {}
-{
-   (<BOM>)?
-}
 void Prologue() : {}
 {
   ( BaseDecl() | PrefixDecl() )*
@@ -645,6 +639,7 @@
 | n = NumericLiteral() { return n ; }
 | n = BooleanLiteral() { return n ; }
 | <UNDEF> { return null ; }
+| n = QuotedTripleData() { return n ; }
 }
 Element MinusGraphPattern() : { Element el ; }
 {
@@ -784,6 +779,7 @@
   { ElementPathBlock tempAcc = new ElementPathBlock() ; int mark = tempAcc.mark() ; }
   o = GraphNode(tempAcc)
   { insert(tempAcc, mark, s, p, path, o) ; insert(acc, tempAcc) ; }
+  Annotation(acc, s, p, path, o)
 }
 void TriplesSameSubjectPath(TripleCollector acc) : { Node s ; }
 {
@@ -835,6 +831,7 @@
   { ElementPathBlock tempAcc = new ElementPathBlock() ; int mark = tempAcc.mark() ; }
   o = GraphNodePath(tempAcc)
   { insert(tempAcc, mark, s, p, path, o) ; insert(acc, tempAcc) ; }
+  AnnotationPath(acc, s, p, path, o)
 }
 Path Path() : { Path p ; }
 {
@@ -995,6 +992,28 @@
        insert(acc, lastCell, nRDFrest, nRDFnil) ;
      return listHead ; }
 }
+void AnnotationPath(TripleCollector acc, Node s, Node p, Path path, Node o) : {}
+{
+  (
+    <L_ANN>
+      { Node pAnn = preConditionAnnotation(s, p, path, o, token.beginLine, token.beginColumn) ;
+        Node x = createQuotedTriple(s, pAnn, o, token.beginLine, token.beginColumn);
+      }
+      PropertyListPathNotEmpty(x, acc)
+    <R_ANN>
+  )?
+}
+void Annotation(TripleCollector acc, Node s, Node p, Path path, Node o) : { }
+{
+  (
+    <L_ANN>
+      { Node pAnn = preConditionAnnotation(s, p, path, o, token.beginLine, token.beginColumn) ;
+        Node x = createQuotedTriple(s, p, o, token.beginLine, token.beginColumn);
+      }
+      PropertyListNotEmpty(x, acc)
+    <R_ANN>
+  )?
+}
 Node GraphNode(TripleCollectorMark acc) : { Node n ; }
 {
   n = VarOrTerm() { return n ; }
@@ -1007,35 +1026,57 @@
  |
   n = TriplesNodePath(acc) { return n ; }
 }
-Node VarOrTerm() : {Node n = null ; }
+Node VarOrTerm() : { Node n = null ; String iri ; }
 {
-  ( n = Var() | n = GraphTerm() )
+  ( n = Var()
+  | iri = iri() { return createNode(iri) ; }
+  | n = RDFLiteral() { return n ; }
+  | n = NumericLiteral() { return n ; }
+  | n = BooleanLiteral() { return n ; }
+  | n = BlankNode() { return n ; }
+  | <NIL> { return nRDFnil ; }
+  | n = QuotedTriple()
+)
   { return n ; }
 }
+Node QuotedTriple() : { Node n = null ; Token t ; Node s , p , o ; }
+{
+  t = <LT2>
+  s = VarOrTerm()
+  p = Verb()
+  o = VarOrTerm()
+  { n = createQuotedTriple(s, p, o, t.beginLine, t.beginColumn); }
+  <GT2>
+  { return n; }
+}
+Node QuotedTripleData() : { Node n = null ; Token t ; String iri ; Node s , p , o ; }
+{
+  t = <LT2>
+  ( s = DataValueTerm() )
+  ( iri = iri() { p = createNode(iri) ; } | <KW_A> { p = nRDFtype ; } )
+  ( o = DataValueTerm() )
+  { n = createQuotedTriple(s, p, o, t.beginLine, t.beginColumn); }
+  <GT2>
+  { return n; }
+}
+Node DataValueTerm() : { Node n = null ; String iri ; Node s , p , o ; }
+{
+  iri = iri() { return createNode(iri) ; }
+| n = RDFLiteral() { return n ; }
+| n = NumericLiteral() { return n ; }
+| n = BooleanLiteral() { return n ; }
+| n = QuotedTripleData() { return n ; }
+}
 Node VarOrIri() : {Node n = null ; String iri ; }
 {
   ( n = Var() | iri = iri() { n = createNode(iri) ; } )
   { return n ; }
 }
-Node VarOrBlankNodeOrIri() : {Node n = null ; String iri ; }
-{
-  ( n = Var() | n = BlankNode() | iri = iri() { n = createNode(iri) ; } )
-  { return n ; }
-}
 Var Var() : { Token t ;}
 {
     ( t = <VAR1> | t = <VAR2> )
     { return createVariable(t.image, t.beginLine, t.beginColumn) ; }
 }
-Node GraphTerm() : { Node n ; String iri ; }
-{
-  iri = iri() { return createNode(iri) ; }
-| n = RDFLiteral() { return n ; }
-| n = NumericLiteral() { return n ; }
-| n = BooleanLiteral() { return n ; }
-| n = BlankNode() { return n ; }
-| <NIL> { return nRDFnil ; }
-}
 Expr Expression() : { Expr expr ; }
 {
   expr = ConditionalOrExpression()
@@ -1153,8 +1194,29 @@
   | n = NumericLiteral() { return asExpr(n) ; }
   | n = BooleanLiteral() { return asExpr(n) ; }
   | n = Var() { return asExpr(n) ; }
+  | n = ExprQuotedTriple() { return asExpr(n) ; }
   )
 }
+Node ExprVarOrTerm() : { Node n; String s;}
+{
+  ( s = iri() { n = createNode(s); }
+  | n = RDFLiteral()
+  | n = NumericLiteral()
+  | n = BooleanLiteral()
+  | n = Var()
+  | n = ExprQuotedTriple()
+  )
+  { return n; }
+}
+Node ExprQuotedTriple() : { Token t ; Node s,p,o,n; }
+{ t = <LT2>
+  s = ExprVarOrTerm()
+  p = Verb()
+  o = ExprVarOrTerm()
+  { n = createQuotedTriple(s, p, o, t.beginLine, t.beginColumn); }
+  <GT2>
+  { return n; }
+}
 Expr BrackettedExpression() : { Expr expr ; }
 {
     <LPAREN> expr = Expression() <RPAREN> { return expr ; }
@@ -1250,6 +1312,16 @@
     expr = RegexExpression() { return expr ; }
   | expr = ExistsFunc() { return expr ; }
   | expr = NotExistsFunc() { return expr ; }
+| <IS_TRIPLE> <LPAREN> expr = Expression() <RPAREN>
+    { return new E_IsTriple(expr) ; }
+  | <TRIPLE> <LPAREN> expr1 = Expression() <COMMA> expr2 = Expression() <COMMA> expr3 = Expression() <RPAREN>
+    { return new E_TripleFn(expr1, expr2, expr3) ; }
+  | <SUBJECT> <LPAREN> expr = Expression() <RPAREN>
+    { return new E_TripleSubject(expr) ; }
+  | <PREDICATE> <LPAREN> expr = Expression() <RPAREN>
+    { return new E_TriplePredicate(expr) ; }
+  | <OBJECT> <LPAREN> expr = Expression() <RPAREN>
+    { return new E_TripleObject(expr) ; }
 }
 Expr RegexExpression() :
 { Expr expr ; Expr patExpr = null ; Expr flagsExpr = null ; }
@@ -1447,8 +1519,6 @@
   <#WS: " " | "\t" | "\n" | "\r" | "\f">
 |
   <#WSC: <WS> | <SINGLE_LINE_COMMENT> >
-|
-  <BOM: "\uFEFF">
 }
 TOKEN:
 {
@@ -1495,6 +1565,11 @@
 | < MINUS_P: "minus" >
 | < BIND: "bind" >
 | < SERVICE: "service" >
+| < TRIPLE: "TRIPLE" >
+| < IS_TRIPLE: "isTRIPLE" >
+| < SUBJECT: "SUBJECT" >
+| < PREDICATE: "PREDICATE" >
+| < OBJECT: "OBJECT" >
 | < EXISTS: "exists" >
 | < NOT: "not" >
 | < AS: "as" >
@@ -1654,6 +1729,10 @@
 | < LT: "<" >
 | < LE: "<=" >
 | < GE: ">=" >
+| < GT2: ">>" >
+| < LT2: "<<" >
+| <L_ANN: "{|" >
+| <R_ANN: "|}" >
 | < BANG: "!" >
 | < TILDE: "~" >
 | < COLON: ":" >
diff --git a/jena-arq/Grammar/sparql_12.txt b/jena-arq/Grammar/sparql_12.txt
index b71962f..98411b5 100644
--- a/jena-arq/Grammar/sparql_12.txt
+++ b/jena-arq/Grammar/sparql_12.txt
@@ -16,7 +16,6 @@
 <DEFAULT> TOKEN : {
 <#WS: " " | "\t" | "\n" | "\r" | "\f">
 | <#WSC: <WS> | <SINGLE_LINE_COMMENT>>
-| <BOM: "\ufeff">
 }
 
 <DEFAULT> TOKEN : {
@@ -62,6 +61,11 @@
 | <MINUS_P: "minus">
 | <BIND: "bind">
 | <SERVICE: "service">
+| <TRIPLE: "TRIPLE">
+| <IS_TRIPLE: "isTRIPLE">
+| <SUBJECT: "SUBJECT">
+| <PREDICATE: "PREDICATE">
+| <OBJECT: "OBJECT">
 | <EXISTS: "exists">
 | <NOT: "not">
 | <AS: "as">
@@ -207,6 +211,10 @@
 | <LT: "<">
 | <LE: "<=">
 | <GE: ">=">
+| <GT2: ">>">
+| <LT2: "<<">
+| <L_ANN: "{|">
+| <R_ANN: "|}">
 | <BANG: "!">
 | <TILDE: "~">
 | <COLON: ":">
@@ -243,10 +251,9 @@
 }
 
 NON-TERMINALS
-	QueryUnit	:=	ByteOrderMark Query <EOF>
+	QueryUnit	:=	Query <EOF>
 	Query	:=	Prologue ( SelectQuery | ConstructQuery | DescribeQuery | AskQuery ) ValuesClause
-	UpdateUnit	:=	ByteOrderMark Update <EOF>
-	ByteOrderMark	:=	( <BOM> )?
+	UpdateUnit	:=	Update <EOF>
 	Prologue	:=	( BaseDecl | PrefixDecl )*
 	BaseDecl	:=	<BASE> IRIREF
 	PrefixDecl	:=	<PREFIX> <PNAME_NS> IRIREF
@@ -313,6 +320,7 @@
 		|	NumericLiteral
 		|	BooleanLiteral
 		|	<UNDEF>
+		|	QuotedTripleData
 	MinusGraphPattern	:=	<MINUS_P> GroupGraphPattern
 	GroupOrUnionGraphPattern	:=	GroupGraphPattern ( <UNION> GroupGraphPattern )*
 	Filter	:=	<FILTER> Constraint
@@ -328,7 +336,7 @@
 	PropertyListNotEmpty	:=	Verb ObjectList ( <SEMICOLON> ( Verb ObjectList )? )*
 	Verb	:=	( VarOrIri | <KW_A> )
 	ObjectList	:=	Object ( <COMMA> Object )*
-	Object	:=	GraphNode
+	Object	:=	GraphNode Annotation
 	TriplesSameSubjectPath	:=	VarOrTerm PropertyListPathNotEmpty
 		|	TriplesNodePath PropertyListPath
 	PropertyListPath	:=	( PropertyListPathNotEmpty )?
@@ -336,7 +344,7 @@
 	VerbPath	:=	Path
 	VerbSimple	:=	Var
 	ObjectListPath	:=	ObjectPath ( <COMMA> ObjectPath )*
-	ObjectPath	:=	GraphNodePath
+	ObjectPath	:=	GraphNodePath AnnotationPath
 	Path	:=	PathAlternative
 	PathAlternative	:=	PathSequence ( <VBAR> PathSequence )*
 	PathSequence	:=	PathEltOrInverse ( <SLASH> PathEltOrInverse )*
@@ -355,20 +363,22 @@
 	BlankNodePropertyListPath	:=	<LBRACKET> PropertyListPathNotEmpty <RBRACKET>
 	Collection	:=	<LPAREN> ( GraphNode )+ <RPAREN>
 	CollectionPath	:=	<LPAREN> ( GraphNodePath )+ <RPAREN>
+	AnnotationPath	:=	( <L_ANN> PropertyListPathNotEmpty <R_ANN> )?
+	Annotation	:=	( <L_ANN> PropertyListNotEmpty <R_ANN> )?
 	GraphNode	:=	VarOrTerm
 		|	TriplesNode
 	GraphNodePath	:=	VarOrTerm
 		|	TriplesNodePath
-	VarOrTerm	:=	( Var | GraphTerm )
-	VarOrIri	:=	( Var | iri )
-	VarOrBlankNodeOrIri	:=	( Var | BlankNode | iri )
-	Var	:=	( <VAR1> | <VAR2> )
-	GraphTerm	:=	iri
+	VarOrTerm	:=	( Var | iri | RDFLiteral | NumericLiteral | BooleanLiteral | BlankNode | <NIL> | QuotedTriple )
+	QuotedTriple	:=	<LT2> VarOrTerm Verb VarOrTerm <GT2>
+	QuotedTripleData	:=	<LT2> ( DataValueTerm ) ( iri | <KW_A> ) ( DataValueTerm ) <GT2>
+	DataValueTerm	:=	iri
 		|	RDFLiteral
 		|	NumericLiteral
 		|	BooleanLiteral
-		|	BlankNode
-		|	<NIL>
+		|	QuotedTripleData
+	VarOrIri	:=	( Var | iri )
+	Var	:=	( <VAR1> | <VAR2> )
 	Expression	:=	ConditionalOrExpression
 	ConditionalOrExpression	:=	ConditionalAndExpression ( <SC_OR> ConditionalAndExpression )*
 	ConditionalAndExpression	:=	ValueLogical ( <SC_AND> ValueLogical )*
@@ -381,7 +391,9 @@
 		|	<PLUS> PrimaryExpression
 		|	<MINUS> PrimaryExpression
 		|	PrimaryExpression
-	PrimaryExpression	:=	( BrackettedExpression | BuiltInCall | iriOrFunction | RDFLiteral | NumericLiteral | BooleanLiteral | Var )
+	PrimaryExpression	:=	( BrackettedExpression | BuiltInCall | iriOrFunction | RDFLiteral | NumericLiteral | BooleanLiteral | Var | ExprQuotedTriple )
+	ExprVarOrTerm	:=	( iri | RDFLiteral | NumericLiteral | BooleanLiteral | Var | ExprQuotedTriple )
+	ExprQuotedTriple	:=	<LT2> ExprVarOrTerm Verb ExprVarOrTerm <GT2>
 	BrackettedExpression	:=	<LPAREN> Expression <RPAREN>
 	BuiltInCall	:=	Aggregate
 		|	<STR> <LPAREN> Expression <RPAREN>
@@ -438,6 +450,11 @@
 		|	RegexExpression
 		|	ExistsFunc
 		|	NotExistsFunc
+		|	<IS_TRIPLE> <LPAREN> Expression <RPAREN>
+		|	<TRIPLE> <LPAREN> Expression <COMMA> Expression <COMMA> Expression <RPAREN>
+		|	<SUBJECT> <LPAREN> Expression <RPAREN>
+		|	<PREDICATE> <LPAREN> Expression <RPAREN>
+		|	<OBJECT> <LPAREN> Expression <RPAREN>
 	RegexExpression	:=	<REGEX> <LPAREN> Expression <COMMA> Expression ( <COMMA> Expression )? <RPAREN>
 	SubstringExpression	:=	<SUBSTR> <LPAREN> Expression <COMMA> Expression ( <COMMA> Expression )? <RPAREN>
 	StrReplaceExpression	:=	<REPLACE> <LPAREN> Expression <COMMA> Expression <COMMA> Expression ( <COMMA> Expression )? <RPAREN>
diff --git a/jena-arq/pom.xml b/jena-arq/pom.xml
index 3d6a7f3..d090442 100644
--- a/jena-arq/pom.xml
+++ b/jena-arq/pom.xml
@@ -172,22 +172,6 @@
   </dependencies>
 
   <build>
-    <resources>
-      <resource>
-        <filtering>true</filtering>
-        <directory>src/main/resources</directory>
-        <includes>
-          <include>org/apache/jena/arq/arq-properties.xml</include>
-        </includes>
-      </resource>
-      <resource>
-        <filtering>false</filtering>
-        <directory>src/main/resources</directory>
-        <excludes>
-          <exclude>org/apache/jena/arq/arq-properties.xml</exclude>
-        </excludes>
-      </resource>
-    </resources>
 
     <plugins>
 
diff --git a/jena-arq/src/main/java/org/apache/jena/query/Syntax.java b/jena-arq/src/main/java/org/apache/jena/query/Syntax.java
index 3506990..855c943 100644
--- a/jena-arq/src/main/java/org/apache/jena/query/Syntax.java
+++ b/jena-arq/src/main/java/org/apache/jena/query/Syntax.java
@@ -57,8 +57,8 @@
      */
     public static Syntax defaultUpdateSyntax = defaultSyntax;
 
-    /** The query syntax currently that is standardized, published, SPARQL Query */
-    public static final Syntax syntaxSPARQL = syntaxSPARQL_11;
+    /** The latest SPARQL query syntax - no ARQ syntax extensions. */
+    public static final Syntax syntaxSPARQL = syntaxSPARQL_12;
 
     public static TranslationTable<Syntax> querySyntaxNames = new TranslationTable<>(true);
     static {
diff --git a/jena-arq/src/main/java/org/apache/jena/riot/lang/extra/LangParserBase.java b/jena-arq/src/main/java/org/apache/jena/riot/lang/extra/LangParserBase.java
index 2ad47ef..64ef633 100644
--- a/jena-arq/src/main/java/org/apache/jena/riot/lang/extra/LangParserBase.java
+++ b/jena-arq/src/main/java/org/apache/jena/riot/lang/extra/LangParserBase.java
@@ -130,7 +130,13 @@
         return n ;
     }
 
+    /** @deprecated Use {@link #createQuotedTriple} */
+    @Deprecated
     protected Node createTripleTerm(Node s, Node p, Node o, int line, int column) {
+        return createQuotedTriple(s, p, o, line, column);
+    }
+
+    protected Node createQuotedTriple(Node s, Node p, Node o, int line, int column) {
         return profile.createTripleNode(s, p, o, line, column);
     }
 
diff --git a/jena-arq/src/main/java/org/apache/jena/riot/lang/extra/javacc/TokenMgrError.java b/jena-arq/src/main/java/org/apache/jena/riot/lang/extra/javacc/TokenMgrError.java
index c05a51a..5a34331 100644
--- a/jena-arq/src/main/java/org/apache/jena/riot/lang/extra/javacc/TokenMgrError.java
+++ b/jena-arq/src/main/java/org/apache/jena/riot/lang/extra/javacc/TokenMgrError.java
@@ -123,11 +123,10 @@
    * Note: You can customize the lexical error message by modifying this method.
    */
   protected static String LexicalErr(boolean EOFSeen, int lexState, int errorLine, int errorColumn, String errorAfter, int curChar) {
-    char curChar1 = (char)curChar;
     return("Lexical error at line " + //
           errorLine + ", column " + //
           errorColumn + ".  Encountered: " + //
-          (EOFSeen ? "<EOF>" : ("'" + addEscapes(String.valueOf(curChar)) + "' (" + (int)curChar + "),")) + //
+          (EOFSeen ? "<EOF>" : ("'" + addEscapes(String.valueOf(curChar)) + "' (" + curChar + "),")) + //
           (errorAfter == null || errorAfter.length() == 0 ? "" : " after prefix \"" + addEscapes(errorAfter) + "\"")) + //
           (lexState == 0 ? "" : " (in lexical state " + lexState + ")");
   }
@@ -165,4 +164,4 @@
     this(LexicalErr(EOFSeen, lexState, errorLine, errorColumn, errorAfter, curChar), reason);
   }
 }
-/* JavaCC - OriginalChecksum=cc48a0e796ab5bbd5916ae20e6023f73 (do not edit this line) */
+/* JavaCC - OriginalChecksum=d9be68a0e6bddc4b5d4d52579b110992 (do not edit this line) */
diff --git a/jena-arq/src/main/java/org/apache/jena/riot/lang/extra/javacc/TurtleJavacc.java b/jena-arq/src/main/java/org/apache/jena/riot/lang/extra/javacc/TurtleJavacc.java
index c8473e8..93284fd 100644
--- a/jena-arq/src/main/java/org/apache/jena/riot/lang/extra/javacc/TurtleJavacc.java
+++ b/jena-arq/src/main/java/org/apache/jena/riot/lang/extra/javacc/TurtleJavacc.java
@@ -246,7 +246,7 @@
     switch ((jj_ntk==-1)?jj_ntk_f():jj_ntk) {
     case L_ANN:{
       jj_consume_token(L_ANN);
-Node x = createTripleTerm(s, p, o, token.beginLine, token.beginColumn);
+Node x = createQuotedTriple(s, p, o, token.beginLine, token.beginColumn);
       PredicateObjectList(x);
       jj_consume_token(R_ANN);
       break;
@@ -299,7 +299,7 @@
       break;
       }
     case LT2:{
-      s = EmbTriple();
+      s = QuotedTriple();
       break;
       }
     default:
@@ -354,7 +354,7 @@
       break;
       }
     case LT2:{
-      o = EmbTriple();
+      o = QuotedTriple();
       break;
       }
     default:
@@ -366,7 +366,7 @@
     throw new Error("Missing return statement in function");
 }
 
-  final public Node EmbSubject() throws ParseException {Node o ; String iri;
+  final public Node QuotedTripleSubject() throws ParseException {Node o ; String iri;
     switch ((jj_ntk==-1)?jj_ntk_f():jj_ntk) {
     case IRIref:
     case PNAME_NS:
@@ -381,7 +381,7 @@
       break;
       }
     case LT2:{
-      o = EmbTriple();
+      o = QuotedTriple();
       break;
       }
     default:
@@ -393,7 +393,7 @@
     throw new Error("Missing return statement in function");
 }
 
-  final public Node EmbObject() throws ParseException {Node o ; String iri;
+  final public Node QuotedTripleObject() throws ParseException {Node o ; String iri;
     switch ((jj_ntk==-1)?jj_ntk_f():jj_ntk) {
     case IRIref:
     case PNAME_NS:
@@ -420,7 +420,7 @@
       break;
       }
     case LT2:{
-      o = EmbTriple();
+      o = QuotedTriple();
       break;
       }
     default:
@@ -433,14 +433,13 @@
 }
 
 // The syntax for RDF-star <<>>
-  final public Node EmbTriple() throws ParseException {Node s , p , o ; Token t ;
+  final public Node QuotedTriple() throws ParseException {Node s , p , o ; Token t ;
     t = jj_consume_token(LT2);
-int beginLine = t.beginLine; int beginColumn = t.beginColumn; t = null;
-    s = EmbSubject();
+    s = QuotedTripleSubject();
     p = Verb();
-    o = EmbObject();
+    o = QuotedTripleObject();
     jj_consume_token(GT2);
-Node n = createTripleTerm(s, p, o, beginLine, beginColumn);
+Node n = createQuotedTriple(s, p, o, t.beginLine, t.beginColumn);
     {if ("" != null) return n;}
     throw new Error("Missing return statement in function");
 }
diff --git a/jena-arq/src/main/java/org/apache/jena/riot/other/G.java b/jena-arq/src/main/java/org/apache/jena/riot/other/G.java
index b6c45d7..bac5b2b 100644
--- a/jena-arq/src/main/java/org/apache/jena/riot/other/G.java
+++ b/jena-arq/src/main/java/org/apache/jena/riot/other/G.java
@@ -427,6 +427,22 @@
         Objects.requireNonNull(graph, "graph");
         Objects.requireNonNull(node, "node");
         GNode gNode = GNode.create(graph, node);
+        if ( ! GraphList.isListNode(gNode) )
+            return null;
+        return GraphList.members(gNode);
+    }
+
+    /**
+     * Return a java list where the {@code node} is an RDF list of nodes or a single
+     * node (returned a singleton list).
+     */
+    public static List<Node> getOneOrList(Graph graph, Node node) {
+        Objects.requireNonNull(graph, "graph");
+        Objects.requireNonNull(node, "node");
+        GNode gNode = GNode.create(graph, node);
+        // An element on its own is a list of one
+        if ( ! GraphList.isListNode(gNode) )
+            return List.of(node);
         return GraphList.members(gNode);
     }
 
diff --git a/jena-arq/src/main/java/org/apache/jena/riot/system/StreamRDFOps.java b/jena-arq/src/main/java/org/apache/jena/riot/system/StreamRDFOps.java
index 9019c1d..04230c8 100644
--- a/jena-arq/src/main/java/org/apache/jena/riot/system/StreamRDFOps.java
+++ b/jena-arq/src/main/java/org/apache/jena/riot/system/StreamRDFOps.java
@@ -69,8 +69,7 @@
 
     /** Send a dataset to a StreamRDF as prefixes, triples and quads */
     public static void sendDatasetToStream(DatasetGraph datasetGraph, StreamRDF stream) {
-        PrefixMap prefixMap = PrefixMapFactory.create(datasetGraph.getDefaultGraph().getPrefixMapping()) ;
-        sendDatasetToStream(datasetGraph, stream, null, prefixMap) ;
+        sendDatasetToStream(datasetGraph, stream, null, datasetGraph.prefixes()) ;
     }
 
     /** Send a dataset to a StreamRDF as triples and quads, using the explicitly given prefix map */
diff --git a/jena-arq/src/main/java/org/apache/jena/riot/system/StreamRDFWriter.java b/jena-arq/src/main/java/org/apache/jena/riot/system/StreamRDFWriter.java
index 71ca944..bcd69b0 100644
--- a/jena-arq/src/main/java/org/apache/jena/riot/system/StreamRDFWriter.java
+++ b/jena-arq/src/main/java/org/apache/jena/riot/system/StreamRDFWriter.java
@@ -28,7 +28,6 @@
 import org.apache.jena.atlas.io.IO ;
 import org.apache.jena.atlas.lib.CharSpace ;
 import org.apache.jena.graph.Graph ;
-import org.apache.jena.graph.Triple ;
 import org.apache.jena.riot.* ;
 import org.apache.jena.riot.protobuf.ProtobufRDF;
 import org.apache.jena.riot.thrift.ThriftRDF;
@@ -37,7 +36,6 @@
 import org.apache.jena.riot.writer.WriterStreamRDFFlat ;
 import org.apache.jena.riot.writer.WriterStreamRDFPlain ;
 import org.apache.jena.sparql.core.DatasetGraph ;
-import org.apache.jena.sparql.core.Quad ;
 import org.apache.jena.sparql.util.Context;
 
 /** Write RDF in a streaming fashion.
@@ -221,10 +219,7 @@
             return null;
         if ( context == null )
             context = RIOT.getContext().copy();
-        StreamRDF stream = x.create(output, format, context) ;
-        if ( ! RDFLanguages.isQuads(format.getLang()) )
-            // Only pass through triples.
-            stream = new StreamTriplesOnly(stream) ;
+        StreamRDF stream = x.create(output, format, context);
         return stream ;
     }
 
@@ -308,26 +303,8 @@
         StreamRDFOps.datasetToStream(datasetGraph, stream) ;
     }
 
-    private static class StreamTriplesOnly extends StreamRDFWrapper {
-
-        public StreamTriplesOnly(StreamRDF sink) {
-            super(sink) ;
-        }
-
-        @Override public void quad(Quad quad) {
-            if ( quad.isTriple() || quad.isDefaultGraph() || quad.isUnionGraph() ) {
-                triple(quad.asTriple()) ;
-            }
-        }
-
-        @Override public void triple(Triple triple)
-        { other.triple(triple) ; }
-    }
-
     /** Writer registry */
     public static class WriterRegistry<T> {
-        // But RDFWriterregistry is two registries with shared Map<Lang, RDFFormat>
-        // Coudl refator but the benefit is not so great.
 
         private Map<RDFFormat, T>     formatRegistry  = new HashMap<>() ;
         private Map<Lang, RDFFormat>  langToFormat    = new HashMap<>() ;
diff --git a/jena-arq/src/main/java/org/apache/jena/riot/system/StreamTriplesOnly.java b/jena-arq/src/main/java/org/apache/jena/riot/system/StreamTriplesOnly.java
new file mode 100644
index 0000000..b3c1f3d
--- /dev/null
+++ b/jena-arq/src/main/java/org/apache/jena/riot/system/StreamTriplesOnly.java
@@ -0,0 +1,57 @@
+/*
+ * 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.jena.riot.system;
+
+import org.apache.jena.sparql.core.Quad;
+
+/**
+ * {@link StreamRDF} that expects triples not quads.
+ * Runs an action the first time a quad is seen.
+ * Quads that are the default graph or no graph are redirected to {@link StreamRDF#triple}.
+ */
+public class StreamTriplesOnly extends StreamRDFWrapper {
+
+    public static StreamRDF actionIfQuads(StreamRDF stream, Runnable action) {
+        return new StreamTriplesOnly(stream, action);
+    }
+
+    private boolean seenQuads = false;
+    private final Runnable action;
+
+    private StreamTriplesOnly(StreamRDF sink, Runnable action) {
+        super(sink) ;
+        this.action = action;
+    }
+
+    @Override
+    public void quad(Quad quad) {
+        if ( quad.isTriple() || quad.isDefaultGraph() || quad.isUnionGraph() ) {
+            triple(quad.asTriple()) ;
+            return;
+        }
+        if ( ! seenQuads ) {
+            action.run();
+            seenQuads = true;
+        }
+    }
+
+//        @Override public void triple(Triple triple)
+//        { other.triple(triple) ; }
+}
+
diff --git a/jena-arq/src/main/java/org/apache/jena/sparql/lang/QueryParserBase.java b/jena-arq/src/main/java/org/apache/jena/sparql/lang/QueryParserBase.java
index c09bb79..9e7634b 100644
--- a/jena-arq/src/main/java/org/apache/jena/sparql/lang/QueryParserBase.java
+++ b/jena-arq/src/main/java/org/apache/jena/sparql/lang/QueryParserBase.java
@@ -399,7 +399,13 @@
         return null;
     }
 
+    /** @deprecated Use {@link #createQuotedTrple}. */
+    @Deprecated
     protected Node createTripleTerm(Node s, Node p, Node o, int line, int column) {
+        return createQuotedTriple(s, p, o, line, column);
+    }
+
+    protected Node createQuotedTriple(Node s, Node p, Node o, int line, int column) {
         return NodeFactory.createTripleNode(s, p, o);
     }
 
diff --git a/jena-arq/src/main/java/org/apache/jena/sparql/lang/arq/ARQParser.java b/jena-arq/src/main/java/org/apache/jena/sparql/lang/arq/ARQParser.java
index a4fb444..349144c 100644
--- a/jena-arq/src/main/java/org/apache/jena/sparql/lang/arq/ARQParser.java
+++ b/jena-arq/src/main/java/org/apache/jena/sparql/lang/arq/ARQParser.java
@@ -2857,11 +2857,6 @@
 
   final public Node DataBlockValue() throws ParseException {Node n ; String iri ;
     switch ((jj_ntk==-1)?jj_ntk_f():jj_ntk) {
-    case LT2:{
-      n = TripleTermData();
-{if ("" != null) return n ;}
-      break;
-      }
     case IRIref:
     case PNAME_NS:
     case PNAME_LN:{
@@ -2901,6 +2896,11 @@
 {if ("" != null) return null ;}
       break;
       }
+    case LT2:{
+      n = QuotedTripleData();
+{if ("" != null) return n ;}
+      break;
+      }
     default:
       jj_la1[88] = jj_gen;
       jj_consume_token(-1);
@@ -4097,7 +4097,7 @@
     case L_ANN:{
       jj_consume_token(L_ANN);
 Node pAnn = preConditionAnnotation(s, p, path, o, token.beginLine, token.beginColumn) ;
-        Node x = createTripleTerm(s, pAnn, o, token.beginLine, token.beginColumn);
+        Node x = createQuotedTriple(s, pAnn, o, token.beginLine, token.beginColumn);
       PropertyListPathNotEmpty(x, acc);
       jj_consume_token(R_ANN);
       break;
@@ -4113,7 +4113,7 @@
     case L_ANN:{
       jj_consume_token(L_ANN);
 Node pAnn = preConditionAnnotation(s, p, path, o, token.beginLine, token.beginColumn) ;
-        Node x = createTripleTerm(s, p, o, token.beginLine, token.beginColumn);
+        Node x = createQuotedTriple(s, p, o, token.beginLine, token.beginColumn);
       PropertyListNotEmpty(x, acc);
       jj_consume_token(R_ANN);
       break;
@@ -4212,12 +4212,8 @@
     throw new Error("Missing return statement in function");
 }
 
-  final public Node VarOrTerm() throws ParseException {Node n = null ;
+  final public Node VarOrTerm() throws ParseException {Node n = null ; String iri ;
     switch ((jj_ntk==-1)?jj_ntk_f():jj_ntk) {
-    case LT2:{
-      n = TripleTerm();
-      break;
-      }
     case VAR1:
     case VAR2:{
       n = Var();
@@ -4225,10 +4221,19 @@
       }
     case IRIref:
     case PNAME_NS:
-    case PNAME_LN:
-    case BLANK_NODE_LABEL:
-    case TRUE:
-    case FALSE:
+    case PNAME_LN:{
+      iri = iri();
+{if ("" != null) return createNode(iri) ;}
+      break;
+      }
+    case STRING_LITERAL1:
+    case STRING_LITERAL2:
+    case STRING_LITERAL_LONG1:
+    case STRING_LITERAL_LONG2:{
+      n = RDFLiteral();
+{if ("" != null) return n ;}
+      break;
+      }
     case INTEGER:
     case DECIMAL:
     case DOUBLE:
@@ -4237,14 +4242,30 @@
     case DOUBLE_POSITIVE:
     case INTEGER_NEGATIVE:
     case DECIMAL_NEGATIVE:
-    case DOUBLE_NEGATIVE:
-    case STRING_LITERAL1:
-    case STRING_LITERAL2:
-    case STRING_LITERAL_LONG1:
-    case STRING_LITERAL_LONG2:
-    case NIL:
+    case DOUBLE_NEGATIVE:{
+      n = NumericLiteral();
+{if ("" != null) return n ;}
+      break;
+      }
+    case TRUE:
+    case FALSE:{
+      n = BooleanLiteral();
+{if ("" != null) return n ;}
+      break;
+      }
+    case BLANK_NODE_LABEL:
     case ANON:{
-      n = GraphTerm();
+      n = BlankNode();
+{if ("" != null) return n ;}
+      break;
+      }
+    case NIL:{
+      jj_consume_token(NIL);
+{if ("" != null) return nRDFnil ;}
+      break;
+      }
+    case LT2:{
+      n = QuotedTriple();
       break;
       }
     default:
@@ -4256,18 +4277,18 @@
     throw new Error("Missing return statement in function");
 }
 
-  final public Node TripleTerm() throws ParseException {Node n = null ; Token t ; Node s , p , o ;
+  final public Node QuotedTriple() throws ParseException {Node n = null ; Token t ; Node s , p , o ;
     t = jj_consume_token(LT2);
     s = VarOrTerm();
     p = Verb();
     o = VarOrTerm();
-n = createTripleTerm(s, p, o, t.beginLine, t.beginColumn);
+n = createQuotedTriple(s, p, o, t.beginLine, t.beginColumn);
     jj_consume_token(GT2);
 {if ("" != null) return n;}
     throw new Error("Missing return statement in function");
 }
 
-  final public Node TripleTermData() throws ParseException {Node n = null ; Token t ; String iri ; Node s , p , o ;
+  final public Node QuotedTripleData() throws ParseException {Node n = null ; Token t ; String iri ; Node s , p , o ;
     t = jj_consume_token(LT2);
     s = DataValueTerm();
     switch ((jj_ntk==-1)?jj_ntk_f():jj_ntk) {
@@ -4289,7 +4310,7 @@
       throw new ParseException();
     }
     o = DataValueTerm();
-n = createTripleTerm(s, p, o, t.beginLine, t.beginColumn);
+n = createQuotedTriple(s, p, o, t.beginLine, t.beginColumn);
     jj_consume_token(GT2);
 {if ("" != null) return n;}
     throw new Error("Missing return statement in function");
@@ -4332,7 +4353,7 @@
       break;
       }
     case LT2:{
-      n = TripleTermData();
+      n = QuotedTripleData();
 {if ("" != null) return n ;}
       break;
       }
@@ -4414,61 +4435,6 @@
     throw new Error("Missing return statement in function");
 }
 
-  final public Node GraphTerm() throws ParseException {Node n ; String iri ;
-    switch ((jj_ntk==-1)?jj_ntk_f():jj_ntk) {
-    case IRIref:
-    case PNAME_NS:
-    case PNAME_LN:{
-      iri = iri();
-{if ("" != null) return createNode(iri) ;}
-      break;
-      }
-    case STRING_LITERAL1:
-    case STRING_LITERAL2:
-    case STRING_LITERAL_LONG1:
-    case STRING_LITERAL_LONG2:{
-      n = RDFLiteral();
-{if ("" != null) return n ;}
-      break;
-      }
-    case INTEGER:
-    case DECIMAL:
-    case DOUBLE:
-    case INTEGER_POSITIVE:
-    case DECIMAL_POSITIVE:
-    case DOUBLE_POSITIVE:
-    case INTEGER_NEGATIVE:
-    case DECIMAL_NEGATIVE:
-    case DOUBLE_NEGATIVE:{
-      n = NumericLiteral();
-{if ("" != null) return n ;}
-      break;
-      }
-    case TRUE:
-    case FALSE:{
-      n = BooleanLiteral();
-{if ("" != null) return n ;}
-      break;
-      }
-    case BLANK_NODE_LABEL:
-    case ANON:{
-      n = BlankNode();
-{if ("" != null) return n ;}
-      break;
-      }
-    case NIL:{
-      jj_consume_token(NIL);
-{if ("" != null) return nRDFnil ;}
-      break;
-      }
-    default:
-      jj_la1[139] = jj_gen;
-      jj_consume_token(-1);
-      throw new ParseException();
-    }
-    throw new Error("Missing return statement in function");
-}
-
   final public Expr Expression() throws ParseException {Expr expr ;
     expr = ConditionalOrExpression();
 {if ("" != null) return expr ;}
@@ -4485,7 +4451,7 @@
         break;
         }
       default:
-        jj_la1[140] = jj_gen;
+        jj_la1[139] = jj_gen;
         break label_37;
       }
       jj_consume_token(SC_OR);
@@ -4506,7 +4472,7 @@
         break;
         }
       default:
-        jj_la1[141] = jj_gen;
+        jj_la1[140] = jj_gen;
         break label_38;
       }
       jj_consume_token(SC_AND);
@@ -4585,14 +4551,14 @@
         break;
         }
       default:
-        jj_la1[142] = jj_gen;
+        jj_la1[141] = jj_gen;
         jj_consume_token(-1);
         throw new ParseException();
       }
       break;
       }
     default:
-      jj_la1[143] = jj_gen;
+      jj_la1[142] = jj_gen;
       ;
     }
 {if ("" != null) return expr1 ;}
@@ -4622,7 +4588,7 @@
         break;
         }
       default:
-        jj_la1[144] = jj_gen;
+        jj_la1[143] = jj_gen;
         break label_39;
       }
       switch ((jj_ntk==-1)?jj_ntk_f():jj_ntk) {
@@ -4664,7 +4630,7 @@
           break;
           }
         default:
-          jj_la1[145] = jj_gen;
+          jj_la1[144] = jj_gen;
           jj_consume_token(-1);
           throw new ParseException();
         }
@@ -4677,7 +4643,7 @@
             break;
             }
           default:
-            jj_la1[146] = jj_gen;
+            jj_la1[145] = jj_gen;
             break label_40;
           }
           switch ((jj_ntk==-1)?jj_ntk_f():jj_ntk) {
@@ -4694,7 +4660,7 @@
             break;
             }
           default:
-            jj_la1[147] = jj_gen;
+            jj_la1[146] = jj_gen;
             jj_consume_token(-1);
             throw new ParseException();
           }
@@ -4706,7 +4672,7 @@
         break;
         }
       default:
-        jj_la1[148] = jj_gen;
+        jj_la1[147] = jj_gen;
         jj_consume_token(-1);
         throw new ParseException();
       }
@@ -4728,7 +4694,7 @@
         break;
         }
       default:
-        jj_la1[149] = jj_gen;
+        jj_la1[148] = jj_gen;
         break label_41;
       }
       switch ((jj_ntk==-1)?jj_ntk_f():jj_ntk) {
@@ -4757,7 +4723,7 @@
         break;
         }
       default:
-        jj_la1[150] = jj_gen;
+        jj_la1[149] = jj_gen;
         jj_consume_token(-1);
         throw new ParseException();
       }
@@ -4893,7 +4859,7 @@
       break;
       }
     default:
-      jj_la1[151] = jj_gen;
+      jj_la1[150] = jj_gen;
       jj_consume_token(-1);
       throw new ParseException();
     }
@@ -5032,12 +4998,12 @@
       break;
       }
     case LT2:{
-      n = ExprTripleTerm();
+      n = ExprQuotedTriple();
 {if ("" != null) return asExpr(n) ;}
       break;
       }
     default:
-      jj_la1[152] = jj_gen;
+      jj_la1[151] = jj_gen;
       jj_consume_token(-1);
       throw new ParseException();
     }
@@ -5083,11 +5049,11 @@
       break;
       }
     case LT2:{
-      n = ExprTripleTerm();
+      n = ExprQuotedTriple();
       break;
       }
     default:
-      jj_la1[153] = jj_gen;
+      jj_la1[152] = jj_gen;
       jj_consume_token(-1);
       throw new ParseException();
     }
@@ -5095,12 +5061,12 @@
     throw new Error("Missing return statement in function");
 }
 
-  final public Node ExprTripleTerm() throws ParseException {Token t ; Node s,p,o,n;
+  final public Node ExprQuotedTriple() throws ParseException {Token t ; Node s,p,o,n;
     t = jj_consume_token(LT2);
     s = ExprVarOrTerm();
     p = Verb();
     o = ExprVarOrTerm();
-n = createTripleTerm(s, p, o, t.beginLine, t.beginColumn);
+n = createQuotedTriple(s, p, o, t.beginLine, t.beginColumn);
     jj_consume_token(GT2);
 {if ("" != null) return n;}
     throw new Error("Missing return statement in function");
@@ -5191,7 +5157,7 @@
         break;
         }
       default:
-        jj_la1[154] = jj_gen;
+        jj_la1[153] = jj_gen;
         ;
       }
       jj_consume_token(RPAREN);
@@ -5209,7 +5175,7 @@
         break;
         }
       default:
-        jj_la1[155] = jj_gen;
+        jj_la1[154] = jj_gen;
         ;
       }
       jj_consume_token(RPAREN);
@@ -5232,7 +5198,7 @@
         break;
         }
       default:
-        jj_la1[156] = jj_gen;
+        jj_la1[155] = jj_gen;
         jj_consume_token(-1);
         throw new ParseException();
       }
@@ -5469,7 +5435,7 @@
         break;
         }
       default:
-        jj_la1[157] = jj_gen;
+        jj_la1[156] = jj_gen;
         ;
       }
       jj_consume_token(RPAREN);
@@ -5560,7 +5526,7 @@
           break;
           }
         default:
-          jj_la1[158] = jj_gen;
+          jj_la1[157] = jj_gen;
           break label_42;
         }
         jj_consume_token(COMMA);
@@ -5713,7 +5679,7 @@
       break;
       }
     default:
-      jj_la1[159] = jj_gen;
+      jj_la1[158] = jj_gen;
       jj_consume_token(-1);
       throw new ParseException();
     }
@@ -5733,7 +5699,7 @@
       break;
       }
     default:
-      jj_la1[160] = jj_gen;
+      jj_la1[159] = jj_gen;
       ;
     }
     jj_consume_token(RPAREN);
@@ -5754,7 +5720,7 @@
       break;
       }
     default:
-      jj_la1[161] = jj_gen;
+      jj_la1[160] = jj_gen;
       ;
     }
     jj_consume_token(RPAREN);
@@ -5777,7 +5743,7 @@
       break;
       }
     default:
-      jj_la1[162] = jj_gen;
+      jj_la1[161] = jj_gen;
       ;
     }
     jj_consume_token(RPAREN);
@@ -5817,7 +5783,7 @@
         break;
         }
       default:
-        jj_la1[163] = jj_gen;
+        jj_la1[162] = jj_gen;
         ;
       }
       switch ((jj_ntk==-1)?jj_ntk_f():jj_ntk) {
@@ -5934,7 +5900,7 @@
         break;
         }
       default:
-        jj_la1[164] = jj_gen;
+        jj_la1[163] = jj_gen;
         jj_consume_token(-1);
         throw new ParseException();
       }
@@ -5953,7 +5919,7 @@
         break;
         }
       default:
-        jj_la1[165] = jj_gen;
+        jj_la1[164] = jj_gen;
         ;
       }
       expr = Expression();
@@ -5971,7 +5937,7 @@
         break;
         }
       default:
-        jj_la1[166] = jj_gen;
+        jj_la1[165] = jj_gen;
         ;
       }
       expr = Expression();
@@ -5989,7 +5955,7 @@
         break;
         }
       default:
-        jj_la1[167] = jj_gen;
+        jj_la1[166] = jj_gen;
         ;
       }
       expr = Expression();
@@ -6007,7 +5973,7 @@
         break;
         }
       default:
-        jj_la1[168] = jj_gen;
+        jj_la1[167] = jj_gen;
         ;
       }
       expr = Expression();
@@ -6025,7 +5991,7 @@
         break;
         }
       default:
-        jj_la1[169] = jj_gen;
+        jj_la1[168] = jj_gen;
         ;
       }
       expr = Expression();
@@ -6043,7 +6009,7 @@
         break;
         }
       default:
-        jj_la1[170] = jj_gen;
+        jj_la1[169] = jj_gen;
         ;
       }
       expr = Expression();
@@ -6061,7 +6027,7 @@
         break;
         }
       default:
-        jj_la1[171] = jj_gen;
+        jj_la1[170] = jj_gen;
         ;
       }
       expr = Expression();
@@ -6079,7 +6045,7 @@
         break;
         }
       default:
-        jj_la1[172] = jj_gen;
+        jj_la1[171] = jj_gen;
         ;
       }
       expr = Expression();
@@ -6100,7 +6066,7 @@
             break;
             }
           default:
-            jj_la1[173] = jj_gen;
+            jj_la1[172] = jj_gen;
             ;
           }
         } else {
@@ -6114,7 +6080,7 @@
             break;
             }
           default:
-            jj_la1[174] = jj_gen;
+            jj_la1[173] = jj_gen;
             jj_consume_token(-1);
             throw new ParseException();
           }
@@ -6122,7 +6088,7 @@
         break;
         }
       default:
-        jj_la1[175] = jj_gen;
+        jj_la1[174] = jj_gen;
         ;
       }
       jj_consume_token(RPAREN);
@@ -6139,7 +6105,7 @@
         break;
         }
       default:
-        jj_la1[176] = jj_gen;
+        jj_la1[175] = jj_gen;
         ;
       }
       expr = Expression();
@@ -6157,7 +6123,7 @@
         break;
         }
       default:
-        jj_la1[177] = jj_gen;
+        jj_la1[176] = jj_gen;
         ;
       }
       expr = Expression();
@@ -6175,7 +6141,7 @@
         break;
         }
       default:
-        jj_la1[178] = jj_gen;
+        jj_la1[177] = jj_gen;
         ;
       }
       expr = Expression();
@@ -6193,7 +6159,7 @@
         break;
         }
       default:
-        jj_la1[179] = jj_gen;
+        jj_la1[178] = jj_gen;
         ;
       }
       expr = Expression();
@@ -6211,7 +6177,7 @@
         break;
         }
       default:
-        jj_la1[180] = jj_gen;
+        jj_la1[179] = jj_gen;
         ;
       }
       expr = Expression();
@@ -6229,7 +6195,7 @@
         break;
         }
       default:
-        jj_la1[181] = jj_gen;
+        jj_la1[180] = jj_gen;
         ;
       }
       expr = Expression();
@@ -6247,7 +6213,7 @@
       break;
       }
     default:
-      jj_la1[182] = jj_gen;
+      jj_la1[181] = jj_gen;
       jj_consume_token(-1);
       throw new ParseException();
     }
@@ -6270,7 +6236,7 @@
       break;
       }
     default:
-      jj_la1[183] = jj_gen;
+      jj_la1[182] = jj_gen;
       ;
     }
 if ( a == null )
@@ -6304,14 +6270,14 @@
         break;
         }
       default:
-        jj_la1[184] = jj_gen;
+        jj_la1[183] = jj_gen;
         jj_consume_token(-1);
         throw new ParseException();
       }
       break;
       }
     default:
-      jj_la1[185] = jj_gen;
+      jj_la1[184] = jj_gen;
       ;
     }
 {if ("" != null) return createLiteral(lex, lang, uri) ;}
@@ -6339,7 +6305,7 @@
       break;
       }
     default:
-      jj_la1[186] = jj_gen;
+      jj_la1[185] = jj_gen;
       jj_consume_token(-1);
       throw new ParseException();
     }
@@ -6365,7 +6331,7 @@
       break;
       }
     default:
-      jj_la1[187] = jj_gen;
+      jj_la1[186] = jj_gen;
       jj_consume_token(-1);
       throw new ParseException();
     }
@@ -6390,7 +6356,7 @@
       break;
       }
     default:
-      jj_la1[188] = jj_gen;
+      jj_la1[187] = jj_gen;
       jj_consume_token(-1);
       throw new ParseException();
     }
@@ -6415,7 +6381,7 @@
       break;
       }
     default:
-      jj_la1[189] = jj_gen;
+      jj_la1[188] = jj_gen;
       jj_consume_token(-1);
       throw new ParseException();
     }
@@ -6435,7 +6401,7 @@
       break;
       }
     default:
-      jj_la1[190] = jj_gen;
+      jj_la1[189] = jj_gen;
       jj_consume_token(-1);
       throw new ParseException();
     }
@@ -6465,7 +6431,7 @@
       break;
       }
     default:
-      jj_la1[191] = jj_gen;
+      jj_la1[190] = jj_gen;
       jj_consume_token(-1);
       throw new ParseException();
     }
@@ -6489,7 +6455,7 @@
       break;
       }
     default:
-      jj_la1[192] = jj_gen;
+      jj_la1[191] = jj_gen;
       jj_consume_token(-1);
       throw new ParseException();
     }
@@ -6509,7 +6475,7 @@
       break;
       }
     default:
-      jj_la1[193] = jj_gen;
+      jj_la1[192] = jj_gen;
       jj_consume_token(-1);
       throw new ParseException();
     }
@@ -6529,7 +6495,7 @@
       break;
       }
     default:
-      jj_la1[194] = jj_gen;
+      jj_la1[193] = jj_gen;
       jj_consume_token(-1);
       throw new ParseException();
     }
@@ -6582,77 +6548,63 @@
     finally { jj_save(4, xla); }
   }
 
-  private boolean jj_3R_RegexExpression_1521_5_120()
+  private boolean jj_3R_RegexExpression_1516_5_120()
  {
     if (jj_scan_token(REGEX)) return true;
     if (jj_scan_token(LPAREN)) return true;
     return false;
   }
 
-  private boolean jj_3R_BuiltInCall_1515_5_110()
+  private boolean jj_3R_BuiltInCall_1510_5_110()
  {
     if (jj_scan_token(OBJECT)) return true;
     if (jj_scan_token(LPAREN)) return true;
     return false;
   }
 
-  private boolean jj_3R_BuiltInCall_1513_5_109()
+  private boolean jj_3R_BuiltInCall_1508_5_109()
  {
     if (jj_scan_token(PREDICATE)) return true;
     if (jj_scan_token(LPAREN)) return true;
     return false;
   }
 
-  private boolean jj_3R_BuiltInCall_1511_5_108()
+  private boolean jj_3R_BuiltInCall_1506_5_108()
  {
     if (jj_scan_token(SUBJECT)) return true;
     if (jj_scan_token(LPAREN)) return true;
     return false;
   }
 
-  private boolean jj_3R_BuiltInCall_1509_5_107()
+  private boolean jj_3R_BuiltInCall_1504_5_107()
  {
     if (jj_scan_token(TRIPLE)) return true;
     if (jj_scan_token(LPAREN)) return true;
     return false;
   }
 
-  private boolean jj_3R_BuiltInCall_1507_5_106()
+  private boolean jj_3R_BuiltInCall_1501_5_105()
+ {
+    if (jj_3R_NotExistsFunc_1557_4_122()) return true;
+    return false;
+  }
+
+  private boolean jj_3R_BuiltInCall_1502_3_106()
  {
     if (jj_scan_token(IS_TRIPLE)) return true;
     if (jj_scan_token(LPAREN)) return true;
     return false;
   }
 
-  private boolean jj_3R_BuiltInCall_1506_5_105()
+  private boolean jj_3R_BuiltInCall_1500_5_104()
  {
-    if (jj_3R_NotExistsFunc_1562_4_122()) return true;
+    if (jj_3R_ExistsFunc_1551_4_121()) return true;
     return false;
   }
 
-  private boolean jj_3R_BuiltInCall_1505_5_104()
+  private boolean jj_3R_BuiltInCall_1499_5_103()
  {
-    if (jj_3R_ExistsFunc_1556_4_121()) return true;
-    return false;
-  }
-
-  private boolean jj_3R_BuiltInCall_1504_5_103()
- {
-    if (jj_3R_RegexExpression_1521_5_120()) return true;
-    return false;
-  }
-
-  private boolean jj_3R_BuiltInCall_1501_5_102()
- {
-    if (jj_scan_token(IS_NUMERIC)) return true;
-    if (jj_scan_token(LPAREN)) return true;
-    return false;
-  }
-
-  private boolean jj_3R_BuiltInCall_1499_5_101()
- {
-    if (jj_scan_token(IS_LITERAL)) return true;
-    if (jj_scan_token(LPAREN)) return true;
+    if (jj_3R_RegexExpression_1516_5_120()) return true;
     return false;
   }
 
@@ -6705,573 +6657,587 @@
     return false;
   }
 
-  private boolean jj_3R_Collection_1116_3_157()
+  private boolean jj_3R_Collection_1115_3_165()
  {
     if (jj_scan_token(LPAREN)) return true;
     return false;
   }
 
-  private boolean jj_3R_BuiltInCall_1497_5_100()
+  private boolean jj_3R_BuiltInCall_1496_5_102()
+ {
+    if (jj_scan_token(IS_NUMERIC)) return true;
+    if (jj_scan_token(LPAREN)) return true;
+    return false;
+  }
+
+  private boolean jj_3R_BuiltInCall_1494_5_101()
+ {
+    if (jj_scan_token(IS_LITERAL)) return true;
+    if (jj_scan_token(LPAREN)) return true;
+    return false;
+  }
+
+  private boolean jj_3R_BuiltInCall_1492_5_100()
  {
     if (jj_scan_token(IS_BLANK)) return true;
     if (jj_scan_token(LPAREN)) return true;
     return false;
   }
 
-  private boolean jj_3R_BuiltInCall_1495_5_99()
+  private boolean jj_3R_BuiltInCall_1490_5_99()
  {
     if (jj_scan_token(IS_URI)) return true;
     if (jj_scan_token(LPAREN)) return true;
     return false;
   }
 
-  private boolean jj_3R_BuiltInCall_1493_5_98()
+  private boolean jj_3R_BuiltInCall_1488_5_98()
  {
     if (jj_scan_token(IS_IRI)) return true;
     if (jj_scan_token(LPAREN)) return true;
     return false;
   }
 
-  private boolean jj_3R_BuiltInCall_1491_5_97()
+  private boolean jj_3R_BuiltInCall_1486_5_97()
  {
     if (jj_scan_token(SAME_TERM)) return true;
     if (jj_scan_token(LPAREN)) return true;
     return false;
   }
 
-  private boolean jj_3R_BuiltInCall_1489_5_96()
+  private boolean jj_3R_BuiltInCall_1484_5_96()
  {
     if (jj_scan_token(STRDT)) return true;
     if (jj_scan_token(LPAREN)) return true;
     return false;
   }
 
-  private boolean jj_3R_BuiltInCall_1487_5_95()
+  private boolean jj_3R_BuiltInCall_1482_5_95()
  {
     if (jj_scan_token(STRLANG)) return true;
     if (jj_scan_token(LPAREN)) return true;
     return false;
   }
 
-  private boolean jj_3R_BuiltInCall_1483_5_94()
+  private boolean jj_3R_BuiltInCall_1478_5_94()
  {
     if (jj_scan_token(IF)) return true;
     if (jj_scan_token(LPAREN)) return true;
     return false;
   }
 
-  private boolean jj_3R_BuiltInCall_1476_5_93()
+  private boolean jj_3R_BlankNodePropertyList_1092_3_166()
+ {
+    if (jj_scan_token(LBRACKET)) return true;
+    return false;
+  }
+
+  private boolean jj_3R_BuiltInCall_1471_5_93()
  {
     if (jj_scan_token(CALL)) return true;
     if (jj_scan_token(LPAREN)) return true;
     return false;
   }
 
-  private boolean jj_3R_BlankNodePropertyList_1093_3_158()
+  private boolean jj_3R_TriplesNode_1088_3_156()
  {
-    if (jj_scan_token(LBRACKET)) return true;
+    if (jj_3R_BlankNodePropertyList_1092_3_166()) return true;
     return false;
   }
 
-  private boolean jj_3R_BuiltInCall_1474_5_92()
+  private boolean jj_3R_BuiltInCall_1469_5_92()
  {
     if (jj_scan_token(COALESCE)) return true;
-    if (jj_3R_ExpressionList_834_3_117()) return true;
+    if (jj_3R_ExpressionList_833_3_117()) return true;
     return false;
   }
 
-  private boolean jj_3R_BuiltInCall_1473_5_91()
+  private boolean jj_3R_BuiltInCall_1468_5_91()
  {
     if (jj_scan_token(VERSION)) return true;
     if (jj_scan_token(NIL)) return true;
     return false;
   }
 
-  private boolean jj_3R_BuiltInCall_1472_5_90()
+  private boolean jj_3R_TriplesNode_1086_3_126()
+ {
+    Token xsp;
+    xsp = jj_scanpos;
+    if (jj_3R_TriplesNode_1086_3_155()) {
+    jj_scanpos = xsp;
+    if (jj_3R_TriplesNode_1088_3_156()) return true;
+    }
+    return false;
+  }
+
+  private boolean jj_3R_TriplesNode_1086_3_155()
+ {
+    if (jj_3R_Collection_1115_3_165()) return true;
+    return false;
+  }
+
+  private boolean jj_3R_BuiltInCall_1467_5_90()
  {
     if (jj_scan_token(SHA512)) return true;
     if (jj_scan_token(LPAREN)) return true;
     return false;
   }
 
-  private boolean jj_3R_BuiltInCall_1471_5_89()
+  private boolean jj_3R_BuiltInCall_1466_5_89()
  {
     if (jj_scan_token(SHA384)) return true;
     if (jj_scan_token(LPAREN)) return true;
     return false;
   }
 
-  private boolean jj_3R_TriplesNode_1089_3_151()
- {
-    if (jj_3R_BlankNodePropertyList_1093_3_158()) return true;
-    return false;
-  }
-
-  private boolean jj_3R_BuiltInCall_1470_5_88()
+  private boolean jj_3R_BuiltInCall_1465_5_88()
  {
     if (jj_scan_token(SHA256)) return true;
     if (jj_scan_token(LPAREN)) return true;
     return false;
   }
 
-  private boolean jj_3R_BuiltInCall_1469_5_87()
+  private boolean jj_3R_BuiltInCall_1464_5_87()
  {
     if (jj_scan_token(SHA1)) return true;
     if (jj_scan_token(LPAREN)) return true;
     return false;
   }
 
-  private boolean jj_3R_TriplesNode_1087_3_126()
- {
-    Token xsp;
-    xsp = jj_scanpos;
-    if (jj_3R_TriplesNode_1087_3_150()) {
-    jj_scanpos = xsp;
-    if (jj_3R_TriplesNode_1089_3_151()) return true;
-    }
-    return false;
-  }
-
-  private boolean jj_3R_TriplesNode_1087_3_150()
- {
-    if (jj_3R_Collection_1116_3_157()) return true;
-    return false;
-  }
-
-  private boolean jj_3R_BuiltInCall_1468_5_86()
+  private boolean jj_3R_BuiltInCall_1463_5_86()
  {
     if (jj_scan_token(MD5)) return true;
     if (jj_scan_token(LPAREN)) return true;
     return false;
   }
 
-  private boolean jj_3R_BuiltInCall_1467_5_85()
+  private boolean jj_3R_BuiltInCall_1462_5_85()
  {
     if (jj_scan_token(STRUUID)) return true;
     if (jj_scan_token(NIL)) return true;
     return false;
   }
 
-  private boolean jj_3R_BuiltInCall_1466_5_84()
+  private boolean jj_3R_BuiltInCall_1461_5_84()
  {
     if (jj_scan_token(UUID)) return true;
     if (jj_scan_token(NIL)) return true;
     return false;
   }
 
-  private boolean jj_3R_BuiltInCall_1465_5_83()
+  private boolean jj_3R_BuiltInCall_1460_5_83()
  {
     if (jj_scan_token(NOW)) return true;
     if (jj_scan_token(NIL)) return true;
     return false;
   }
 
-  private boolean jj_3R_BuiltInCall_1462_5_82()
+  private boolean jj_3R_BuiltInCall_1457_5_82()
  {
     if (jj_scan_token(ADJUST)) return true;
     if (jj_scan_token(LPAREN)) return true;
     return false;
   }
 
-  private boolean jj_3R_BuiltInCall_1461_5_81()
+  private boolean jj_3R_BuiltInCall_1456_5_81()
  {
     if (jj_scan_token(TZ)) return true;
     if (jj_scan_token(LPAREN)) return true;
     return false;
   }
 
-  private boolean jj_3R_BuiltInCall_1460_5_80()
+  private boolean jj_3R_BuiltInCall_1455_5_80()
  {
     if (jj_scan_token(TIMEZONE)) return true;
     if (jj_scan_token(LPAREN)) return true;
     return false;
   }
 
-  private boolean jj_3R_BuiltInCall_1459_5_79()
+  private boolean jj_3R_BuiltInCall_1454_5_79()
  {
     if (jj_scan_token(SECONDS)) return true;
     if (jj_scan_token(LPAREN)) return true;
     return false;
   }
 
-  private boolean jj_3R_BuiltInCall_1458_5_78()
+  private boolean jj_3R_BuiltInCall_1453_5_78()
  {
     if (jj_scan_token(MINUTES)) return true;
     if (jj_scan_token(LPAREN)) return true;
     return false;
   }
 
-  private boolean jj_3R_BuiltInCall_1457_5_77()
+  private boolean jj_3R_BuiltInCall_1452_5_77()
  {
     if (jj_scan_token(HOURS)) return true;
     if (jj_scan_token(LPAREN)) return true;
     return false;
   }
 
-  private boolean jj_3R_BuiltInCall_1456_5_76()
+  private boolean jj_3R_BuiltInCall_1451_5_76()
  {
     if (jj_scan_token(DAY)) return true;
     if (jj_scan_token(LPAREN)) return true;
     return false;
   }
 
-  private boolean jj_3R_BuiltInCall_1455_5_75()
+  private boolean jj_3R_BuiltInCall_1450_5_75()
  {
     if (jj_scan_token(MONTH)) return true;
     if (jj_scan_token(LPAREN)) return true;
     return false;
   }
 
-  private boolean jj_3R_BuiltInCall_1454_5_74()
+  private boolean jj_3R_BuiltInCall_1449_5_74()
  {
     if (jj_scan_token(YEAR)) return true;
     if (jj_scan_token(LPAREN)) return true;
     return false;
   }
 
-  private boolean jj_3R_BuiltInCall_1452_5_73()
+  private boolean jj_3R_BuiltInCall_1447_5_73()
  {
     if (jj_scan_token(STRAFTER)) return true;
     if (jj_scan_token(LPAREN)) return true;
     return false;
   }
 
-  private boolean jj_3R_BuiltInCall_1450_5_72()
+  private boolean jj_3R_BuiltInCall_1445_5_72()
  {
     if (jj_scan_token(STRBEFORE)) return true;
     if (jj_scan_token(LPAREN)) return true;
     return false;
   }
 
-  private boolean jj_3R_BuiltInCall_1448_5_71()
+  private boolean jj_3R_BuiltInCall_1443_5_71()
  {
     if (jj_scan_token(STRENDS)) return true;
     if (jj_scan_token(LPAREN)) return true;
     return false;
   }
 
-  private boolean jj_3R_BuiltInCall_1446_5_70()
+  private boolean jj_3R_BuiltInCall_1441_5_70()
  {
     if (jj_scan_token(STRSTARTS)) return true;
     if (jj_scan_token(LPAREN)) return true;
     return false;
   }
 
-  private boolean jj_3R_BuiltInCall_1444_5_69()
+  private boolean jj_3R_BuiltInCall_1439_5_69()
  {
     if (jj_scan_token(CONTAINS)) return true;
     if (jj_scan_token(LPAREN)) return true;
     return false;
   }
 
-  private boolean jj_3R_BuiltInCall_1443_5_68()
+  private boolean jj_3R_BuiltInCall_1438_5_68()
  {
     if (jj_scan_token(ENCODE_FOR_URI)) return true;
     if (jj_scan_token(LPAREN)) return true;
     return false;
   }
 
-  private boolean jj_3R_BuiltInCall_1442_5_67()
+  private boolean jj_3R_BuiltInCall_1437_5_67()
  {
     if (jj_scan_token(LCASE)) return true;
     if (jj_scan_token(LPAREN)) return true;
     return false;
   }
 
-  private boolean jj_3R_BuiltInCall_1441_5_66()
+  private boolean jj_3R_BuiltInCall_1436_5_66()
  {
     if (jj_scan_token(UCASE)) return true;
     if (jj_scan_token(LPAREN)) return true;
     return false;
   }
 
-  private boolean jj_3R_BuiltInCall_1440_5_65()
+  private boolean jj_3R_BuiltInCall_1435_5_65()
  {
-    if (jj_3R_StrReplaceExpression_1545_3_119()) return true;
+    if (jj_3R_StrReplaceExpression_1540_3_119()) return true;
     return false;
   }
 
-  private boolean jj_3R_BuiltInCall_1439_5_64()
+  private boolean jj_3R_BuiltInCall_1434_5_64()
  {
     if (jj_scan_token(STRLEN)) return true;
     if (jj_scan_token(LPAREN)) return true;
     return false;
   }
 
-  private boolean jj_3R_BuiltInCall_1438_5_63()
+  private boolean jj_3R_BuiltInCall_1433_5_63()
  {
-    if (jj_3R_SubstringExpression_1533_5_118()) return true;
+    if (jj_3R_SubstringExpression_1528_5_118()) return true;
     return false;
   }
 
-  private boolean jj_3R_BuiltInCall_1437_5_62()
+  private boolean jj_3R_BuiltInCall_1432_5_62()
  {
     if (jj_scan_token(CONCAT)) return true;
-    if (jj_3R_ExpressionList_834_3_117()) return true;
+    if (jj_3R_ExpressionList_833_3_117()) return true;
     return false;
   }
 
-  private boolean jj_3R_BuiltInCall_1436_5_61()
+  private boolean jj_3R_BuiltInCall_1431_5_61()
  {
     if (jj_scan_token(IDIV)) return true;
     if (jj_scan_token(LPAREN)) return true;
     return false;
   }
 
-  private boolean jj_3R_BuiltInCall_1435_5_60()
+  private boolean jj_3R_BuiltInCall_1430_5_60()
  {
     if (jj_scan_token(MOD)) return true;
     if (jj_scan_token(LPAREN)) return true;
     return false;
   }
 
-  private boolean jj_3R_BuiltInCall_1434_5_59()
+  private boolean jj_3R_BuiltInCall_1429_5_59()
  {
     if (jj_scan_token(ROUND)) return true;
     if (jj_scan_token(LPAREN)) return true;
     return false;
   }
 
-  private boolean jj_3R_BuiltInCall_1433_5_58()
+  private boolean jj_3R_BuiltInCall_1428_5_58()
  {
     if (jj_scan_token(FLOOR)) return true;
     if (jj_scan_token(LPAREN)) return true;
     return false;
   }
 
-  private boolean jj_3R_BuiltInCall_1432_5_57()
+  private boolean jj_3R_BuiltInCall_1427_5_57()
  {
     if (jj_scan_token(CEIL)) return true;
     if (jj_scan_token(LPAREN)) return true;
     return false;
   }
 
-  private boolean jj_3R_BuiltInCall_1431_5_56()
+  private boolean jj_3R_BuiltInCall_1426_5_56()
  {
     if (jj_scan_token(ABS)) return true;
     if (jj_scan_token(LPAREN)) return true;
     return false;
   }
 
-  private boolean jj_3R_BuiltInCall_1430_5_55()
+  private boolean jj_3R_BuiltInCall_1425_5_55()
  {
     if (jj_scan_token(RAND)) return true;
     if (jj_scan_token(NIL)) return true;
     return false;
   }
 
-  private boolean jj_3R_BuiltInCall_1428_7_116()
+  private boolean jj_3R_BuiltInCall_1423_7_116()
  {
     if (jj_scan_token(NIL)) return true;
     return false;
   }
 
-  private boolean jj_3R_BuiltInCall_1425_7_115()
+  private boolean jj_3R_BuiltInCall_1420_7_115()
  {
     if (jj_scan_token(LPAREN)) return true;
     return false;
   }
 
-  private boolean jj_3R_BuiltInCall_1424_5_54()
+  private boolean jj_3R_BuiltInCall_1419_5_54()
  {
     if (jj_scan_token(BNODE)) return true;
     Token xsp;
     xsp = jj_scanpos;
-    if (jj_3R_BuiltInCall_1425_7_115()) {
+    if (jj_3R_BuiltInCall_1420_7_115()) {
     jj_scanpos = xsp;
-    if (jj_3R_BuiltInCall_1428_7_116()) return true;
+    if (jj_3R_BuiltInCall_1423_7_116()) return true;
     }
     return false;
   }
 
-  private boolean jj_3R_BuiltInCall_1422_5_53()
+  private boolean jj_3R_BuiltInCall_1417_5_53()
  {
     if (jj_scan_token(URI)) return true;
     if (jj_scan_token(LPAREN)) return true;
     return false;
   }
 
-  private boolean jj_3R_BuiltInCall_1420_5_52()
+  private boolean jj_3R_BuiltInCall_1415_5_52()
  {
     if (jj_scan_token(IRI)) return true;
     if (jj_scan_token(LPAREN)) return true;
     return false;
   }
 
-  private boolean jj_3R_BuiltInCall_1418_5_51()
+  private boolean jj_3R_BuiltInCall_1413_5_51()
  {
     if (jj_scan_token(BOUND)) return true;
     if (jj_scan_token(LPAREN)) return true;
     return false;
   }
 
-  private boolean jj_3R_BuiltInCall_1416_5_50()
+  private boolean jj_3R_BuiltInCall_1411_5_50()
  {
     if (jj_scan_token(DTYPE)) return true;
     if (jj_scan_token(LPAREN)) return true;
     return false;
   }
 
-  private boolean jj_3R_BuiltInCall_1413_5_49()
+  private boolean jj_3R_BuiltInCall_1408_5_49()
  {
     if (jj_scan_token(LANGMATCHES)) return true;
     if (jj_scan_token(LPAREN)) return true;
     return false;
   }
 
-  private boolean jj_3R_BuiltInCall_1411_5_48()
+  private boolean jj_3R_BuiltInCall_1406_5_48()
  {
     if (jj_scan_token(LANG)) return true;
     if (jj_scan_token(LPAREN)) return true;
     return false;
   }
 
-  private boolean jj_3R_BuiltInCall_1409_5_47()
+  private boolean jj_3R_BuiltInCall_1404_5_47()
  {
     if (jj_scan_token(STR)) return true;
     if (jj_scan_token(LPAREN)) return true;
     return false;
   }
 
-  private boolean jj_3R_BuiltInCall_1407_5_46()
+  private boolean jj_3R_BuiltInCall_1402_5_46()
  {
-    if (jj_3R_Aggregate_1572_3_114()) return true;
+    if (jj_3R_Aggregate_1567_3_114()) return true;
     return false;
   }
 
-  private boolean jj_3R_BuiltInCall_1407_5_43()
+  private boolean jj_3R_BuiltInCall_1402_5_43()
  {
     Token xsp;
     xsp = jj_scanpos;
-    if (jj_3R_BuiltInCall_1407_5_46()) {
+    if (jj_3R_BuiltInCall_1402_5_46()) {
     jj_scanpos = xsp;
-    if (jj_3R_BuiltInCall_1409_5_47()) {
+    if (jj_3R_BuiltInCall_1404_5_47()) {
     jj_scanpos = xsp;
-    if (jj_3R_BuiltInCall_1411_5_48()) {
+    if (jj_3R_BuiltInCall_1406_5_48()) {
     jj_scanpos = xsp;
-    if (jj_3R_BuiltInCall_1413_5_49()) {
+    if (jj_3R_BuiltInCall_1408_5_49()) {
     jj_scanpos = xsp;
-    if (jj_3R_BuiltInCall_1416_5_50()) {
+    if (jj_3R_BuiltInCall_1411_5_50()) {
     jj_scanpos = xsp;
-    if (jj_3R_BuiltInCall_1418_5_51()) {
+    if (jj_3R_BuiltInCall_1413_5_51()) {
     jj_scanpos = xsp;
-    if (jj_3R_BuiltInCall_1420_5_52()) {
+    if (jj_3R_BuiltInCall_1415_5_52()) {
     jj_scanpos = xsp;
-    if (jj_3R_BuiltInCall_1422_5_53()) {
+    if (jj_3R_BuiltInCall_1417_5_53()) {
     jj_scanpos = xsp;
-    if (jj_3R_BuiltInCall_1424_5_54()) {
+    if (jj_3R_BuiltInCall_1419_5_54()) {
     jj_scanpos = xsp;
-    if (jj_3R_BuiltInCall_1430_5_55()) {
+    if (jj_3R_BuiltInCall_1425_5_55()) {
     jj_scanpos = xsp;
-    if (jj_3R_BuiltInCall_1431_5_56()) {
+    if (jj_3R_BuiltInCall_1426_5_56()) {
     jj_scanpos = xsp;
-    if (jj_3R_BuiltInCall_1432_5_57()) {
+    if (jj_3R_BuiltInCall_1427_5_57()) {
     jj_scanpos = xsp;
-    if (jj_3R_BuiltInCall_1433_5_58()) {
+    if (jj_3R_BuiltInCall_1428_5_58()) {
     jj_scanpos = xsp;
-    if (jj_3R_BuiltInCall_1434_5_59()) {
+    if (jj_3R_BuiltInCall_1429_5_59()) {
     jj_scanpos = xsp;
-    if (jj_3R_BuiltInCall_1435_5_60()) {
+    if (jj_3R_BuiltInCall_1430_5_60()) {
     jj_scanpos = xsp;
-    if (jj_3R_BuiltInCall_1436_5_61()) {
+    if (jj_3R_BuiltInCall_1431_5_61()) {
     jj_scanpos = xsp;
-    if (jj_3R_BuiltInCall_1437_5_62()) {
+    if (jj_3R_BuiltInCall_1432_5_62()) {
     jj_scanpos = xsp;
-    if (jj_3R_BuiltInCall_1438_5_63()) {
+    if (jj_3R_BuiltInCall_1433_5_63()) {
     jj_scanpos = xsp;
-    if (jj_3R_BuiltInCall_1439_5_64()) {
+    if (jj_3R_BuiltInCall_1434_5_64()) {
     jj_scanpos = xsp;
-    if (jj_3R_BuiltInCall_1440_5_65()) {
+    if (jj_3R_BuiltInCall_1435_5_65()) {
     jj_scanpos = xsp;
-    if (jj_3R_BuiltInCall_1441_5_66()) {
+    if (jj_3R_BuiltInCall_1436_5_66()) {
     jj_scanpos = xsp;
-    if (jj_3R_BuiltInCall_1442_5_67()) {
+    if (jj_3R_BuiltInCall_1437_5_67()) {
     jj_scanpos = xsp;
-    if (jj_3R_BuiltInCall_1443_5_68()) {
+    if (jj_3R_BuiltInCall_1438_5_68()) {
     jj_scanpos = xsp;
-    if (jj_3R_BuiltInCall_1444_5_69()) {
+    if (jj_3R_BuiltInCall_1439_5_69()) {
     jj_scanpos = xsp;
-    if (jj_3R_BuiltInCall_1446_5_70()) {
+    if (jj_3R_BuiltInCall_1441_5_70()) {
     jj_scanpos = xsp;
-    if (jj_3R_BuiltInCall_1448_5_71()) {
+    if (jj_3R_BuiltInCall_1443_5_71()) {
     jj_scanpos = xsp;
-    if (jj_3R_BuiltInCall_1450_5_72()) {
+    if (jj_3R_BuiltInCall_1445_5_72()) {
     jj_scanpos = xsp;
-    if (jj_3R_BuiltInCall_1452_5_73()) {
+    if (jj_3R_BuiltInCall_1447_5_73()) {
     jj_scanpos = xsp;
-    if (jj_3R_BuiltInCall_1454_5_74()) {
+    if (jj_3R_BuiltInCall_1449_5_74()) {
     jj_scanpos = xsp;
-    if (jj_3R_BuiltInCall_1455_5_75()) {
+    if (jj_3R_BuiltInCall_1450_5_75()) {
     jj_scanpos = xsp;
-    if (jj_3R_BuiltInCall_1456_5_76()) {
+    if (jj_3R_BuiltInCall_1451_5_76()) {
     jj_scanpos = xsp;
-    if (jj_3R_BuiltInCall_1457_5_77()) {
+    if (jj_3R_BuiltInCall_1452_5_77()) {
     jj_scanpos = xsp;
-    if (jj_3R_BuiltInCall_1458_5_78()) {
+    if (jj_3R_BuiltInCall_1453_5_78()) {
     jj_scanpos = xsp;
-    if (jj_3R_BuiltInCall_1459_5_79()) {
+    if (jj_3R_BuiltInCall_1454_5_79()) {
     jj_scanpos = xsp;
-    if (jj_3R_BuiltInCall_1460_5_80()) {
+    if (jj_3R_BuiltInCall_1455_5_80()) {
     jj_scanpos = xsp;
-    if (jj_3R_BuiltInCall_1461_5_81()) {
+    if (jj_3R_BuiltInCall_1456_5_81()) {
     jj_scanpos = xsp;
-    if (jj_3R_BuiltInCall_1462_5_82()) {
+    if (jj_3R_BuiltInCall_1457_5_82()) {
     jj_scanpos = xsp;
-    if (jj_3R_BuiltInCall_1465_5_83()) {
+    if (jj_3R_BuiltInCall_1460_5_83()) {
     jj_scanpos = xsp;
-    if (jj_3R_BuiltInCall_1466_5_84()) {
+    if (jj_3R_BuiltInCall_1461_5_84()) {
     jj_scanpos = xsp;
-    if (jj_3R_BuiltInCall_1467_5_85()) {
+    if (jj_3R_BuiltInCall_1462_5_85()) {
     jj_scanpos = xsp;
-    if (jj_3R_BuiltInCall_1468_5_86()) {
+    if (jj_3R_BuiltInCall_1463_5_86()) {
     jj_scanpos = xsp;
-    if (jj_3R_BuiltInCall_1469_5_87()) {
+    if (jj_3R_BuiltInCall_1464_5_87()) {
     jj_scanpos = xsp;
-    if (jj_3R_BuiltInCall_1470_5_88()) {
+    if (jj_3R_BuiltInCall_1465_5_88()) {
     jj_scanpos = xsp;
-    if (jj_3R_BuiltInCall_1471_5_89()) {
+    if (jj_3R_BuiltInCall_1466_5_89()) {
     jj_scanpos = xsp;
-    if (jj_3R_BuiltInCall_1472_5_90()) {
+    if (jj_3R_BuiltInCall_1467_5_90()) {
     jj_scanpos = xsp;
-    if (jj_3R_BuiltInCall_1473_5_91()) {
+    if (jj_3R_BuiltInCall_1468_5_91()) {
     jj_scanpos = xsp;
-    if (jj_3R_BuiltInCall_1474_5_92()) {
+    if (jj_3R_BuiltInCall_1469_5_92()) {
     jj_scanpos = xsp;
-    if (jj_3R_BuiltInCall_1476_5_93()) {
+    if (jj_3R_BuiltInCall_1471_5_93()) {
     jj_scanpos = xsp;
-    if (jj_3R_BuiltInCall_1483_5_94()) {
+    if (jj_3R_BuiltInCall_1478_5_94()) {
     jj_scanpos = xsp;
-    if (jj_3R_BuiltInCall_1487_5_95()) {
+    if (jj_3R_BuiltInCall_1482_5_95()) {
     jj_scanpos = xsp;
-    if (jj_3R_BuiltInCall_1489_5_96()) {
+    if (jj_3R_BuiltInCall_1484_5_96()) {
     jj_scanpos = xsp;
-    if (jj_3R_BuiltInCall_1491_5_97()) {
+    if (jj_3R_BuiltInCall_1486_5_97()) {
     jj_scanpos = xsp;
-    if (jj_3R_BuiltInCall_1493_5_98()) {
+    if (jj_3R_BuiltInCall_1488_5_98()) {
     jj_scanpos = xsp;
-    if (jj_3R_BuiltInCall_1495_5_99()) {
+    if (jj_3R_BuiltInCall_1490_5_99()) {
     jj_scanpos = xsp;
-    if (jj_3R_BuiltInCall_1497_5_100()) {
+    if (jj_3R_BuiltInCall_1492_5_100()) {
     jj_scanpos = xsp;
-    if (jj_3R_BuiltInCall_1499_5_101()) {
+    if (jj_3R_BuiltInCall_1494_5_101()) {
     jj_scanpos = xsp;
-    if (jj_3R_BuiltInCall_1501_5_102()) {
+    if (jj_3R_BuiltInCall_1496_5_102()) {
     jj_scanpos = xsp;
-    if (jj_3R_BuiltInCall_1504_5_103()) {
+    if (jj_3R_BuiltInCall_1499_5_103()) {
     jj_scanpos = xsp;
-    if (jj_3R_BuiltInCall_1505_5_104()) {
+    if (jj_3R_BuiltInCall_1500_5_104()) {
     jj_scanpos = xsp;
-    if (jj_3R_BuiltInCall_1506_5_105()) {
+    if (jj_3R_BuiltInCall_1501_5_105()) {
     jj_scanpos = xsp;
-    if (jj_3R_BuiltInCall_1507_5_106()) {
+    if (jj_3R_BuiltInCall_1502_3_106()) {
     jj_scanpos = xsp;
-    if (jj_3R_BuiltInCall_1509_5_107()) {
+    if (jj_3R_BuiltInCall_1504_5_107()) {
     jj_scanpos = xsp;
-    if (jj_3R_BuiltInCall_1511_5_108()) {
+    if (jj_3R_BuiltInCall_1506_5_108()) {
     jj_scanpos = xsp;
-    if (jj_3R_BuiltInCall_1513_5_109()) {
+    if (jj_3R_BuiltInCall_1508_5_109()) {
     jj_scanpos = xsp;
-    if (jj_3R_BuiltInCall_1515_5_110()) return true;
+    if (jj_3R_BuiltInCall_1510_5_110()) return true;
     }
     }
     }
@@ -7339,381 +7305,299 @@
     return false;
   }
 
-  private boolean jj_3R_IRIREF_1732_3_153()
+  private boolean jj_3R_IRIREF_1727_3_158()
  {
     if (jj_scan_token(IRIref)) return true;
     return false;
   }
 
-  private boolean jj_3R_BlankNode_1728_3_181()
+  private boolean jj_3R_BlankNode_1723_3_176()
  {
     if (jj_scan_token(ANON)) return true;
     return false;
   }
 
-  private boolean jj_3R_BlankNode_1725_3_171()
+  private boolean jj_3R_BlankNode_1720_3_163()
  {
     Token xsp;
     xsp = jj_scanpos;
-    if (jj_3R_BlankNode_1725_3_180()) {
+    if (jj_3R_BlankNode_1720_3_175()) {
     jj_scanpos = xsp;
-    if (jj_3R_BlankNode_1728_3_181()) return true;
+    if (jj_3R_BlankNode_1723_3_176()) return true;
     }
     return false;
   }
 
-  private boolean jj_3R_BlankNode_1725_3_180()
+  private boolean jj_3R_BlankNode_1720_3_175()
  {
     if (jj_scan_token(BLANK_NODE_LABEL)) return true;
     return false;
   }
 
-  private boolean jj_3R_PrefixedName_1719_5_173()
+  private boolean jj_3R_PrefixedName_1714_5_186()
  {
     if (jj_scan_token(PNAME_NS)) return true;
     return false;
   }
 
-  private boolean jj_3R_PrefixedName_1716_5_172()
+  private boolean jj_3R_PrefixedName_1711_5_185()
  {
     if (jj_scan_token(PNAME_LN)) return true;
     return false;
   }
 
-  private boolean jj_3R_PrefixedName_1716_3_167()
- {
-    Token xsp;
-    xsp = jj_scanpos;
-    if (jj_3R_PrefixedName_1716_5_172()) {
-    jj_scanpos = xsp;
-    if (jj_3R_PrefixedName_1719_5_173()) return true;
-    }
-    return false;
-  }
-
   private boolean jj_3R_GroupGraphPattern_564_3_144()
  {
     if (jj_scan_token(LBRACE)) return true;
     return false;
   }
 
-  private boolean jj_3R_iri_1712_3_160()
- {
-    if (jj_3R_PrefixedName_1716_3_167()) return true;
-    return false;
-  }
-
   private boolean jj_3_3()
  {
     if (jj_scan_token(DOT)) return true;
-    if (jj_3R_TriplesSameSubject_862_3_45()) return true;
+    if (jj_3R_TriplesSameSubject_861_3_45()) return true;
     return false;
   }
 
-  private boolean jj_3R_iri_1710_3_152()
+  private boolean jj_3R_PrefixedName_1711_3_177()
  {
     Token xsp;
     xsp = jj_scanpos;
-    if (jj_3R_iri_1710_3_159()) {
+    if (jj_3R_PrefixedName_1711_5_185()) {
     jj_scanpos = xsp;
-    if (jj_3R_iri_1712_3_160()) return true;
+    if (jj_3R_PrefixedName_1714_5_186()) return true;
     }
     return false;
   }
 
-  private boolean jj_3R_iri_1710_3_159()
+  private boolean jj_3R_iri_1707_3_168()
  {
-    if (jj_3R_IRIREF_1732_3_153()) return true;
+    if (jj_3R_PrefixedName_1711_3_177()) return true;
     return false;
   }
 
-  private boolean jj_3R_String_1701_5_185()
+  private boolean jj_3R_iri_1705_3_157()
+ {
+    Token xsp;
+    xsp = jj_scanpos;
+    if (jj_3R_iri_1705_3_167()) {
+    jj_scanpos = xsp;
+    if (jj_3R_iri_1707_3_168()) return true;
+    }
+    return false;
+  }
+
+  private boolean jj_3R_iri_1705_3_167()
+ {
+    if (jj_3R_IRIREF_1727_3_158()) return true;
+    return false;
+  }
+
+  private boolean jj_3R_String_1696_5_181()
  {
     if (jj_scan_token(STRING_LITERAL_LONG2)) return true;
     return false;
   }
 
-  private boolean jj_3R_String_1700_5_184()
+  private boolean jj_3R_String_1695_5_180()
  {
     if (jj_scan_token(STRING_LITERAL_LONG1)) return true;
     return false;
   }
 
-  private boolean jj_3R_String_1699_5_183()
+  private boolean jj_3R_String_1694_5_179()
  {
     if (jj_scan_token(STRING_LITERAL2)) return true;
     return false;
   }
 
-  private boolean jj_3R_String_1698_5_182()
+  private boolean jj_3R_String_1693_5_178()
  {
     if (jj_scan_token(STRING_LITERAL1)) return true;
     return false;
   }
 
-  private boolean jj_3R_String_1698_3_174()
+  private boolean jj_3R_String_1693_3_169()
  {
     Token xsp;
     xsp = jj_scanpos;
-    if (jj_3R_String_1698_5_182()) {
+    if (jj_3R_String_1693_5_178()) {
     jj_scanpos = xsp;
-    if (jj_3R_String_1699_5_183()) {
+    if (jj_3R_String_1694_5_179()) {
     jj_scanpos = xsp;
-    if (jj_3R_String_1700_5_184()) {
+    if (jj_3R_String_1695_5_180()) {
     jj_scanpos = xsp;
-    if (jj_3R_String_1701_5_185()) return true;
+    if (jj_3R_String_1696_5_181()) return true;
     }
     }
     }
     return false;
   }
 
-  private boolean jj_3R_BooleanLiteral_1694_3_179()
+  private boolean jj_3R_BooleanLiteral_1689_3_174()
  {
     if (jj_scan_token(FALSE)) return true;
     return false;
   }
 
-  private boolean jj_3R_BooleanLiteral_1692_3_170()
+  private boolean jj_3R_BooleanLiteral_1687_3_162()
  {
     Token xsp;
     xsp = jj_scanpos;
-    if (jj_3R_BooleanLiteral_1692_3_178()) {
+    if (jj_3R_BooleanLiteral_1687_3_173()) {
     jj_scanpos = xsp;
-    if (jj_3R_BooleanLiteral_1694_3_179()) return true;
+    if (jj_3R_BooleanLiteral_1689_3_174()) return true;
     }
     return false;
   }
 
-  private boolean jj_3R_BooleanLiteral_1692_3_178()
+  private boolean jj_3R_BooleanLiteral_1687_3_173()
  {
     if (jj_scan_token(TRUE)) return true;
     return false;
   }
 
-  private boolean jj_3R_NumericLiteralNegative_1688_3_197()
+  private boolean jj_3R_NumericLiteralNegative_1683_3_195()
  {
     if (jj_scan_token(DOUBLE_NEGATIVE)) return true;
     return false;
   }
 
-  private boolean jj_3R_NumericLiteralNegative_1687_3_196()
+  private boolean jj_3R_NumericLiteralNegative_1682_3_194()
  {
     if (jj_scan_token(DECIMAL_NEGATIVE)) return true;
     return false;
   }
 
-  private boolean jj_3R_NumericLiteralNegative_1686_3_195()
+  private boolean jj_3R_NumericLiteralNegative_1681_3_193()
  {
     if (jj_scan_token(INTEGER_NEGATIVE)) return true;
     return false;
   }
 
-  private boolean jj_3R_NumericLiteralNegative_1686_3_188()
+  private boolean jj_3R_NumericLiteralNegative_1681_3_184()
  {
     Token xsp;
     xsp = jj_scanpos;
-    if (jj_3R_NumericLiteralNegative_1686_3_195()) {
+    if (jj_3R_NumericLiteralNegative_1681_3_193()) {
     jj_scanpos = xsp;
-    if (jj_3R_NumericLiteralNegative_1687_3_196()) {
+    if (jj_3R_NumericLiteralNegative_1682_3_194()) {
     jj_scanpos = xsp;
-    if (jj_3R_NumericLiteralNegative_1688_3_197()) return true;
+    if (jj_3R_NumericLiteralNegative_1683_3_195()) return true;
     }
     }
     return false;
   }
 
-  private boolean jj_3R_NumericLiteralPositive_1682_3_194()
+  private boolean jj_3R_NumericLiteralPositive_1677_3_192()
  {
     if (jj_scan_token(DOUBLE_POSITIVE)) return true;
     return false;
   }
 
-  private boolean jj_3R_NumericLiteralPositive_1681_3_193()
+  private boolean jj_3R_NumericLiteralPositive_1676_3_191()
  {
     if (jj_scan_token(DECIMAL_POSITIVE)) return true;
     return false;
   }
 
-  private boolean jj_3R_NumericLiteralPositive_1680_3_192()
+  private boolean jj_3R_NumericLiteralPositive_1675_3_190()
  {
     if (jj_scan_token(INTEGER_POSITIVE)) return true;
     return false;
   }
 
-  private boolean jj_3R_NumericLiteralPositive_1680_3_187()
+  private boolean jj_3R_NumericLiteralPositive_1675_3_183()
  {
     Token xsp;
     xsp = jj_scanpos;
-    if (jj_3R_NumericLiteralPositive_1680_3_192()) {
+    if (jj_3R_NumericLiteralPositive_1675_3_190()) {
     jj_scanpos = xsp;
-    if (jj_3R_NumericLiteralPositive_1681_3_193()) {
+    if (jj_3R_NumericLiteralPositive_1676_3_191()) {
     jj_scanpos = xsp;
-    if (jj_3R_NumericLiteralPositive_1682_3_194()) return true;
+    if (jj_3R_NumericLiteralPositive_1677_3_192()) return true;
     }
     }
     return false;
   }
 
-  private boolean jj_3R_NumericLiteralUnsigned_1676_3_191()
+  private boolean jj_3R_NumericLiteralUnsigned_1671_3_189()
  {
     if (jj_scan_token(DOUBLE)) return true;
     return false;
   }
 
-  private boolean jj_3R_NumericLiteralUnsigned_1675_3_190()
+  private boolean jj_3R_NumericLiteralUnsigned_1670_3_188()
  {
     if (jj_scan_token(DECIMAL)) return true;
     return false;
   }
 
-  private boolean jj_3R_NumericLiteralUnsigned_1674_3_189()
+  private boolean jj_3R_NumericLiteralUnsigned_1669_3_187()
  {
     if (jj_scan_token(INTEGER)) return true;
     return false;
   }
 
-  private boolean jj_3R_NumericLiteralUnsigned_1674_3_186()
+  private boolean jj_3R_NumericLiteralUnsigned_1669_3_182()
  {
     Token xsp;
     xsp = jj_scanpos;
-    if (jj_3R_NumericLiteralUnsigned_1674_3_189()) {
+    if (jj_3R_NumericLiteralUnsigned_1669_3_187()) {
     jj_scanpos = xsp;
-    if (jj_3R_NumericLiteralUnsigned_1675_3_190()) {
+    if (jj_3R_NumericLiteralUnsigned_1670_3_188()) {
     jj_scanpos = xsp;
-    if (jj_3R_NumericLiteralUnsigned_1676_3_191()) return true;
+    if (jj_3R_NumericLiteralUnsigned_1671_3_189()) return true;
     }
     }
     return false;
   }
 
-  private boolean jj_3R_NumericLiteral_1668_5_177()
+  private boolean jj_3R_NumericLiteral_1663_5_172()
  {
-    if (jj_3R_NumericLiteralNegative_1686_3_188()) return true;
+    if (jj_3R_NumericLiteralNegative_1681_3_184()) return true;
     return false;
   }
 
-  private boolean jj_3R_NumericLiteral_1667_5_176()
+  private boolean jj_3R_NumericLiteral_1662_5_171()
  {
-    if (jj_3R_NumericLiteralPositive_1680_3_187()) return true;
+    if (jj_3R_NumericLiteralPositive_1675_3_183()) return true;
     return false;
   }
 
-  private boolean jj_3R_NumericLiteral_1666_5_175()
+  private boolean jj_3R_NumericLiteral_1661_5_170()
  {
-    if (jj_3R_NumericLiteralUnsigned_1674_3_186()) return true;
+    if (jj_3R_NumericLiteralUnsigned_1669_3_182()) return true;
     return false;
   }
 
-  private boolean jj_3R_NumericLiteral_1665_3_169()
+  private boolean jj_3R_NumericLiteral_1660_3_161()
  {
     Token xsp;
     xsp = jj_scanpos;
-    if (jj_3R_NumericLiteral_1666_5_175()) {
+    if (jj_3R_NumericLiteral_1661_5_170()) {
     jj_scanpos = xsp;
-    if (jj_3R_NumericLiteral_1667_5_176()) {
+    if (jj_3R_NumericLiteral_1662_5_171()) {
     jj_scanpos = xsp;
-    if (jj_3R_NumericLiteral_1668_5_177()) return true;
+    if (jj_3R_NumericLiteral_1663_5_172()) return true;
     }
     }
     return false;
   }
 
-  private boolean jj_3R_RDFLiteral_1654_3_168()
- {
-    if (jj_3R_String_1698_3_174()) return true;
-    return false;
-  }
-
   private boolean jj_3_1()
  {
-    if (jj_3R_BuiltInCall_1407_5_43()) return true;
+    if (jj_3R_BuiltInCall_1402_5_43()) return true;
     return false;
   }
 
-  private boolean jj_3R_GraphTerm_1253_3_166()
+  private boolean jj_3R_RDFLiteral_1649_3_160()
  {
-    if (jj_scan_token(NIL)) return true;
+    if (jj_3R_String_1693_3_169()) return true;
     return false;
   }
 
-  private boolean jj_3R_GraphTerm_1252_3_165()
- {
-    if (jj_3R_BlankNode_1725_3_171()) return true;
-    return false;
-  }
-
-  private boolean jj_3R_GraphTerm_1251_3_164()
- {
-    if (jj_3R_BooleanLiteral_1692_3_170()) return true;
-    return false;
-  }
-
-  private boolean jj_3R_GraphTerm_1250_3_163()
- {
-    if (jj_3R_NumericLiteral_1665_3_169()) return true;
-    return false;
-  }
-
-  private boolean jj_3R_GraphTerm_1249_3_162()
- {
-    if (jj_3R_RDFLiteral_1654_3_168()) return true;
-    return false;
-  }
-
-  private boolean jj_3R_TriplesSameSubject_865_3_113()
- {
-    if (jj_3R_TriplesNode_1087_3_126()) return true;
-    return false;
-  }
-
-  private boolean jj_3R_GraphTerm_1248_3_156()
- {
-    Token xsp;
-    xsp = jj_scanpos;
-    if (jj_3R_GraphTerm_1248_3_161()) {
-    jj_scanpos = xsp;
-    if (jj_3R_GraphTerm_1249_3_162()) {
-    jj_scanpos = xsp;
-    if (jj_3R_GraphTerm_1250_3_163()) {
-    jj_scanpos = xsp;
-    if (jj_3R_GraphTerm_1251_3_164()) {
-    jj_scanpos = xsp;
-    if (jj_3R_GraphTerm_1252_3_165()) {
-    jj_scanpos = xsp;
-    if (jj_3R_GraphTerm_1253_3_166()) return true;
-    }
-    }
-    }
-    }
-    }
-    return false;
-  }
-
-  private boolean jj_3R_GraphTerm_1248_3_161()
- {
-    if (jj_3R_iri_1710_3_152()) return true;
-    return false;
-  }
-
-  private boolean jj_3R_TriplesSameSubject_862_3_45()
- {
-    Token xsp;
-    xsp = jj_scanpos;
-    if (jj_3R_TriplesSameSubject_862_3_112()) {
-    jj_scanpos = xsp;
-    if (jj_3R_TriplesSameSubject_865_3_113()) return true;
-    }
-    return false;
-  }
-
-  private boolean jj_3R_TriplesSameSubject_862_3_112()
- {
-    if (jj_3R_VarOrTerm_1197_3_125()) return true;
-    return false;
-  }
-
-  private boolean jj_3R_Var_1243_5_155()
+  private boolean jj_3R_Var_1247_5_159()
  {
     Token xsp;
     xsp = jj_scanpos;
@@ -7724,17 +7608,33 @@
     return false;
   }
 
-  private boolean jj_3_4()
+  private boolean jj_3R_TriplesSameSubject_864_3_113()
  {
-    if (jj_scan_token(DOT)) return true;
-    if (jj_3R_TriplesSameSubject_862_3_45()) return true;
+    if (jj_3R_TriplesNode_1086_3_126()) return true;
     return false;
   }
 
-  private boolean jj_3R_Aggregate_1619_5_142()
+  private boolean jj_3R_TriplesSameSubject_861_3_45()
  {
-    if (jj_scan_token(AGG)) return true;
-    if (jj_3R_iri_1710_3_152()) return true;
+    Token xsp;
+    xsp = jj_scanpos;
+    if (jj_3R_TriplesSameSubject_861_3_112()) {
+    jj_scanpos = xsp;
+    if (jj_3R_TriplesSameSubject_864_3_113()) return true;
+    }
+    return false;
+  }
+
+  private boolean jj_3R_TriplesSameSubject_861_3_112()
+ {
+    if (jj_3R_VarOrTerm_1196_3_125()) return true;
+    return false;
+  }
+
+  private boolean jj_3_4()
+ {
+    if (jj_scan_token(DOT)) return true;
+    if (jj_3R_TriplesSameSubject_861_3_45()) return true;
     return false;
   }
 
@@ -7744,17 +7644,10 @@
     return false;
   }
 
-  private boolean jj_3R_Aggregate_1617_5_141()
+  private boolean jj_3R_Aggregate_1614_5_142()
  {
-    if (jj_scan_token(VAR_POP)) return true;
-    if (jj_scan_token(LPAREN)) return true;
-    return false;
-  }
-
-  private boolean jj_3R_Aggregate_1615_5_140()
- {
-    if (jj_scan_token(VAR_SAMP)) return true;
-    if (jj_scan_token(LPAREN)) return true;
+    if (jj_scan_token(AGG)) return true;
+    if (jj_3R_iri_1705_3_157()) return true;
     return false;
   }
 
@@ -7762,42 +7655,42 @@
  {
     if (jj_scan_token(PREFIX)) return true;
     if (jj_scan_token(PNAME_NS)) return true;
-    if (jj_3R_IRIREF_1732_3_153()) return true;
+    if (jj_3R_IRIREF_1727_3_158()) return true;
     return false;
   }
 
-  private boolean jj_3R_Aggregate_1613_5_139()
+  private boolean jj_3R_Aggregate_1612_5_141()
+ {
+    if (jj_scan_token(VAR_POP)) return true;
+    if (jj_scan_token(LPAREN)) return true;
+    return false;
+  }
+
+  private boolean jj_3R_Aggregate_1610_5_140()
+ {
+    if (jj_scan_token(VAR_SAMP)) return true;
+    if (jj_scan_token(LPAREN)) return true;
+    return false;
+  }
+
+  private boolean jj_3R_Aggregate_1608_5_139()
  {
     if (jj_scan_token(VARIANCE)) return true;
     if (jj_scan_token(LPAREN)) return true;
     return false;
   }
 
-  private boolean jj_3R_Aggregate_1611_5_138()
- {
-    if (jj_scan_token(STDEV_POP)) return true;
-    if (jj_scan_token(LPAREN)) return true;
-    return false;
-  }
-
-  private boolean jj_3R_Aggregate_1609_5_137()
- {
-    if (jj_scan_token(STDEV_SAMP)) return true;
-    if (jj_scan_token(LPAREN)) return true;
-    return false;
-  }
-
-  private boolean jj_3R_Aggregate_1607_5_136()
- {
-    if (jj_scan_token(STDEV)) return true;
-    if (jj_scan_token(LPAREN)) return true;
-    return false;
-  }
-
   private boolean jj_3R_BaseDecl_76_3_145()
  {
     if (jj_scan_token(BASE)) return true;
-    if (jj_3R_IRIREF_1732_3_153()) return true;
+    if (jj_3R_IRIREF_1727_3_158()) return true;
+    return false;
+  }
+
+  private boolean jj_3R_Aggregate_1606_5_138()
+ {
+    if (jj_scan_token(STDEV_POP)) return true;
+    if (jj_scan_token(LPAREN)) return true;
     return false;
   }
 
@@ -7818,8 +7711,9 @@
     return false;
   }
 
-  private boolean jj_3R_ExpressionList_837_5_143()
+  private boolean jj_3R_Aggregate_1604_5_137()
  {
+    if (jj_scan_token(STDEV_SAMP)) return true;
     if (jj_scan_token(LPAREN)) return true;
     return false;
   }
@@ -7834,6 +7728,30 @@
     return false;
   }
 
+  private boolean jj_3R_ExpressionList_836_5_143()
+ {
+    if (jj_scan_token(LPAREN)) return true;
+    return false;
+  }
+
+  private boolean jj_3R_Aggregate_1602_5_136()
+ {
+    if (jj_scan_token(STDEV)) return true;
+    if (jj_scan_token(LPAREN)) return true;
+    return false;
+  }
+
+  private boolean jj_3R_ExpressionList_833_3_117()
+ {
+    Token xsp;
+    xsp = jj_scanpos;
+    if (jj_scan_token(185)) {
+    jj_scanpos = xsp;
+    if (jj_3R_ExpressionList_836_5_143()) return true;
+    }
+    return false;
+  }
+
   private boolean jj_3_5()
  {
     if (jj_scan_token(SEMICOLON)) return true;
@@ -7841,153 +7759,187 @@
     return false;
   }
 
-  private boolean jj_3R_ExpressionList_834_3_117()
+  private boolean jj_3R_QuotedTriple_1209_3_164()
  {
-    Token xsp;
-    xsp = jj_scanpos;
-    if (jj_scan_token(185)) {
-    jj_scanpos = xsp;
-    if (jj_3R_ExpressionList_837_5_143()) return true;
-    }
+    if (jj_scan_token(LT2)) return true;
     return false;
   }
 
-  private boolean jj_3R_Aggregate_1594_5_135()
+  private boolean jj_3R_Aggregate_1589_5_135()
  {
     if (jj_scan_token(GROUP_CONCAT)) return true;
     if (jj_scan_token(LPAREN)) return true;
     return false;
   }
 
-  private boolean jj_3R_Aggregate_1592_5_134()
+  private boolean jj_3R_Aggregate_1587_5_134()
  {
     if (jj_scan_token(SAMPLE)) return true;
     if (jj_scan_token(LPAREN)) return true;
     return false;
   }
 
-  private boolean jj_3R_Aggregate_1590_5_133()
+  private boolean jj_3R_VarOrTerm_1203_5_154()
+ {
+    if (jj_3R_QuotedTriple_1209_3_164()) return true;
+    return false;
+  }
+
+  private boolean jj_3R_VarOrTerm_1202_5_153()
+ {
+    if (jj_scan_token(NIL)) return true;
+    return false;
+  }
+
+  private boolean jj_3R_Aggregate_1585_5_133()
  {
     if (jj_scan_token(MODE)) return true;
     if (jj_scan_token(LPAREN)) return true;
     return false;
   }
 
-  private boolean jj_3R_Aggregate_1588_5_132()
+  private boolean jj_3R_VarOrTerm_1201_5_152()
+ {
+    if (jj_3R_BlankNode_1720_3_163()) return true;
+    return false;
+  }
+
+  private boolean jj_3R_VarOrTerm_1200_5_151()
+ {
+    if (jj_3R_BooleanLiteral_1687_3_162()) return true;
+    return false;
+  }
+
+  private boolean jj_3R_Aggregate_1583_5_132()
  {
     if (jj_scan_token(MEDIAN)) return true;
     if (jj_scan_token(LPAREN)) return true;
     return false;
   }
 
-  private boolean jj_3R_TripleTerm_1205_3_154()
+  private boolean jj_3R_VarOrTerm_1199_5_150()
  {
-    if (jj_scan_token(LT2)) return true;
+    if (jj_3R_NumericLiteral_1660_3_161()) return true;
     return false;
   }
 
-  private boolean jj_3R_Aggregate_1586_5_131()
+  private boolean jj_3R_VarOrTerm_1198_5_149()
+ {
+    if (jj_3R_RDFLiteral_1649_3_160()) return true;
+    return false;
+  }
+
+  private boolean jj_3R_Aggregate_1581_5_131()
  {
     if (jj_scan_token(AVG)) return true;
     if (jj_scan_token(LPAREN)) return true;
     return false;
   }
 
-  private boolean jj_3R_Aggregate_1584_5_130()
+  private boolean jj_3R_VarOrTerm_1197_5_148()
+ {
+    if (jj_3R_iri_1705_3_157()) return true;
+    return false;
+  }
+
+  private boolean jj_3R_VarOrTerm_1196_5_147()
+ {
+    if (jj_3R_Var_1247_5_159()) return true;
+    return false;
+  }
+
+  private boolean jj_3R_Aggregate_1579_5_130()
  {
     if (jj_scan_token(MAX)) return true;
     if (jj_scan_token(LPAREN)) return true;
     return false;
   }
 
-  private boolean jj_3R_VarOrTerm_1199_5_149()
+  private boolean jj_3R_VarOrTerm_1196_3_125()
  {
-    if (jj_3R_GraphTerm_1248_3_156()) return true;
+    Token xsp;
+    xsp = jj_scanpos;
+    if (jj_3R_VarOrTerm_1196_5_147()) {
+    jj_scanpos = xsp;
+    if (jj_3R_VarOrTerm_1197_5_148()) {
+    jj_scanpos = xsp;
+    if (jj_3R_VarOrTerm_1198_5_149()) {
+    jj_scanpos = xsp;
+    if (jj_3R_VarOrTerm_1199_5_150()) {
+    jj_scanpos = xsp;
+    if (jj_3R_VarOrTerm_1200_5_151()) {
+    jj_scanpos = xsp;
+    if (jj_3R_VarOrTerm_1201_5_152()) {
+    jj_scanpos = xsp;
+    if (jj_3R_VarOrTerm_1202_5_153()) {
+    jj_scanpos = xsp;
+    if (jj_3R_VarOrTerm_1203_5_154()) return true;
+    }
+    }
+    }
+    }
+    }
+    }
+    }
     return false;
   }
 
-  private boolean jj_3R_Aggregate_1582_5_129()
+  private boolean jj_3R_Aggregate_1577_5_129()
  {
     if (jj_scan_token(MIN)) return true;
     if (jj_scan_token(LPAREN)) return true;
     return false;
   }
 
-  private boolean jj_3R_VarOrTerm_1198_5_148()
- {
-    if (jj_3R_Var_1243_5_155()) return true;
-    return false;
-  }
-
-  private boolean jj_3R_VarOrTerm_1197_5_147()
- {
-    if (jj_3R_TripleTerm_1205_3_154()) return true;
-    return false;
-  }
-
-  private boolean jj_3R_Aggregate_1580_5_128()
+  private boolean jj_3R_Aggregate_1575_5_128()
  {
     if (jj_scan_token(SUM)) return true;
     if (jj_scan_token(LPAREN)) return true;
     return false;
   }
 
-  private boolean jj_3R_VarOrTerm_1197_3_125()
- {
-    Token xsp;
-    xsp = jj_scanpos;
-    if (jj_3R_VarOrTerm_1197_5_147()) {
-    jj_scanpos = xsp;
-    if (jj_3R_VarOrTerm_1198_5_148()) {
-    jj_scanpos = xsp;
-    if (jj_3R_VarOrTerm_1199_5_149()) return true;
-    }
-    }
-    return false;
-  }
-
-  private boolean jj_3R_Aggregate_1573_5_127()
+  private boolean jj_3R_Aggregate_1568_5_127()
  {
     if (jj_scan_token(COUNT)) return true;
     if (jj_scan_token(LPAREN)) return true;
     return false;
   }
 
-  private boolean jj_3R_Aggregate_1572_3_114()
+  private boolean jj_3R_Aggregate_1567_3_114()
  {
     Token xsp;
     xsp = jj_scanpos;
-    if (jj_3R_Aggregate_1573_5_127()) {
+    if (jj_3R_Aggregate_1568_5_127()) {
     jj_scanpos = xsp;
-    if (jj_3R_Aggregate_1580_5_128()) {
+    if (jj_3R_Aggregate_1575_5_128()) {
     jj_scanpos = xsp;
-    if (jj_3R_Aggregate_1582_5_129()) {
+    if (jj_3R_Aggregate_1577_5_129()) {
     jj_scanpos = xsp;
-    if (jj_3R_Aggregate_1584_5_130()) {
+    if (jj_3R_Aggregate_1579_5_130()) {
     jj_scanpos = xsp;
-    if (jj_3R_Aggregate_1586_5_131()) {
+    if (jj_3R_Aggregate_1581_5_131()) {
     jj_scanpos = xsp;
-    if (jj_3R_Aggregate_1588_5_132()) {
+    if (jj_3R_Aggregate_1583_5_132()) {
     jj_scanpos = xsp;
-    if (jj_3R_Aggregate_1590_5_133()) {
+    if (jj_3R_Aggregate_1585_5_133()) {
     jj_scanpos = xsp;
-    if (jj_3R_Aggregate_1592_5_134()) {
+    if (jj_3R_Aggregate_1587_5_134()) {
     jj_scanpos = xsp;
-    if (jj_3R_Aggregate_1594_5_135()) {
+    if (jj_3R_Aggregate_1589_5_135()) {
     jj_scanpos = xsp;
-    if (jj_3R_Aggregate_1607_5_136()) {
+    if (jj_3R_Aggregate_1602_5_136()) {
     jj_scanpos = xsp;
-    if (jj_3R_Aggregate_1609_5_137()) {
+    if (jj_3R_Aggregate_1604_5_137()) {
     jj_scanpos = xsp;
-    if (jj_3R_Aggregate_1611_5_138()) {
+    if (jj_3R_Aggregate_1606_5_138()) {
     jj_scanpos = xsp;
-    if (jj_3R_Aggregate_1613_5_139()) {
+    if (jj_3R_Aggregate_1608_5_139()) {
     jj_scanpos = xsp;
-    if (jj_3R_Aggregate_1615_5_140()) {
+    if (jj_3R_Aggregate_1610_5_140()) {
     jj_scanpos = xsp;
-    if (jj_3R_Aggregate_1617_5_141()) {
+    if (jj_3R_Aggregate_1612_5_141()) {
     jj_scanpos = xsp;
-    if (jj_3R_Aggregate_1619_5_142()) return true;
+    if (jj_3R_Aggregate_1614_5_142()) return true;
     }
     }
     }
@@ -8006,28 +7958,28 @@
     return false;
   }
 
-  private boolean jj_3R_NotExistsFunc_1562_4_122()
+  private boolean jj_3R_NotExistsFunc_1557_4_122()
  {
     if (jj_scan_token(NOT)) return true;
     if (jj_scan_token(EXISTS)) return true;
     return false;
   }
 
-  private boolean jj_3R_ExistsFunc_1556_4_121()
+  private boolean jj_3R_ExistsFunc_1551_4_121()
  {
     if (jj_scan_token(EXISTS)) return true;
     if (jj_3R_GroupGraphPattern_564_3_144()) return true;
     return false;
   }
 
-  private boolean jj_3R_StrReplaceExpression_1545_3_119()
+  private boolean jj_3R_StrReplaceExpression_1540_3_119()
  {
     if (jj_scan_token(REPLACE)) return true;
     if (jj_scan_token(LPAREN)) return true;
     return false;
   }
 
-  private boolean jj_3R_SubstringExpression_1533_5_118()
+  private boolean jj_3R_SubstringExpression_1528_5_118()
  {
     if (jj_scan_token(SUBSTR)) return true;
     if (jj_scan_token(LPAREN)) return true;
@@ -8045,7 +7997,7 @@
   private Token jj_scanpos, jj_lastpos;
   private int jj_la;
   private int jj_gen;
-  final private int[] jj_la1 = new int[195];
+  final private int[] jj_la1 = new int[194];
   static private int[] jj_la1_0;
   static private int[] jj_la1_1;
   static private int[] jj_la1_2;
@@ -8065,28 +8017,28 @@
 	   jj_la1_init_7();
 	}
 	private static void jj_la1_init_0() {
-	   jj_la1_0 = new int[] {0x1e400000,0x200,0x300000,0x300000,0x0,0x1800000,0x1800000,0x1c00,0x0,0xdc00,0xdc00,0xdc00,0x0,0x0,0x0,0xdc00,0xdc00,0x0,0x0,0x0,0x0,0x0,0xc000,0x1c00,0x0,0x0,0x0,0x80000000,0x60000000,0xdc00,0x0,0xdc00,0x1c00,0xdc00,0x0,0xdc00,0xdc00,0x40000000,0x20000000,0x60000000,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x1c00,0x0,0x1c00,0x0,0xfc00,0x0,0x0,0xfc00,0xfc00,0xfc00,0x0,0x0,0xfc00,0x0,0xfc00,0x0,0x400000,0xfc00,0x0,0x0,0xfc00,0xfc00,0x0,0x0,0x0,0xc000,0x1c00,0xc000,0x0,0x0,0x1c00,0x0,0x1c00,0x0,0x1c00,0x800000,0x0,0x0,0x0,0x0,0x0,0xfc00,0x8dc00,0x0,0x8dc00,0x8dc00,0x0,0xfc00,0x88dc00,0x88dc00,0x0,0x88dc00,0x88dc00,0x0,0x0,0x0,0x0,0x0,0x881c00,0x0,0x0,0x0,0x0,0x881c00,0x0,0x81c00,0x81c00,0x81c00,0x81c00,0x0,0x0,0xfc00,0xfc00,0x0,0x0,0xfc00,0xfc00,0xfc00,0x81c00,0x1c00,0xdc00,0xfc00,0xc000,0x3c00,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0xdc00,0xdc00,0xdc00,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x800000,0xdc00,0x800000,0x800000,0x800000,0x800000,0x800000,0x800000,0x800000,0x800000,0x0,0x0,0x0,0x800000,0x800000,0x800000,0x800000,0x800000,0x800000,0x0,0x0,0x10000,0x10000,0x0,0x0,0x0,0x0,0x0,0x0,0x1c00,0x1800,0x2000,};
+	   jj_la1_0 = new int[] {0x1e400000,0x200,0x300000,0x300000,0x0,0x1800000,0x1800000,0x1c00,0x0,0xdc00,0xdc00,0xdc00,0x0,0x0,0x0,0xdc00,0xdc00,0x0,0x0,0x0,0x0,0x0,0xc000,0x1c00,0x0,0x0,0x0,0x80000000,0x60000000,0xdc00,0x0,0xdc00,0x1c00,0xdc00,0x0,0xdc00,0xdc00,0x40000000,0x20000000,0x60000000,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x1c00,0x0,0x1c00,0x0,0xfc00,0x0,0x0,0xfc00,0xfc00,0xfc00,0x0,0x0,0xfc00,0x0,0xfc00,0x0,0x400000,0xfc00,0x0,0x0,0xfc00,0xfc00,0x0,0x0,0x0,0xc000,0x1c00,0xc000,0x0,0x0,0x1c00,0x0,0x1c00,0x0,0x1c00,0x800000,0x0,0x0,0x0,0x0,0x0,0xfc00,0x8dc00,0x0,0x8dc00,0x8dc00,0x0,0xfc00,0x88dc00,0x88dc00,0x0,0x88dc00,0x88dc00,0x0,0x0,0x0,0x0,0x0,0x881c00,0x0,0x0,0x0,0x0,0x881c00,0x0,0x81c00,0x81c00,0x81c00,0x81c00,0x0,0x0,0xfc00,0xfc00,0x0,0x0,0xfc00,0xfc00,0xfc00,0x81c00,0x1c00,0xdc00,0xfc00,0xc000,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0xdc00,0xdc00,0xdc00,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x800000,0xdc00,0x800000,0x800000,0x800000,0x800000,0x800000,0x800000,0x800000,0x800000,0x0,0x0,0x0,0x800000,0x800000,0x800000,0x800000,0x800000,0x800000,0x0,0x0,0x10000,0x10000,0x0,0x0,0x0,0x0,0x0,0x0,0x1c00,0x1800,0x2000,};
 	}
 	private static void jj_la1_init_1() {
-	   jj_la1_1 = new int[] {0x0,0x0,0x0,0x0,0x40,0x0,0x0,0x0,0x1000000,0xf0df0000,0xf0df0000,0xf0df0000,0x40,0x40,0xc0,0x0,0x0,0x40,0x80,0x40,0x40,0x0,0x0,0x20,0x80,0x2000000,0x4000000,0x0,0x0,0xf0df0000,0x1000000,0xf0df0000,0xf0df0000,0xf0df0018,0x18,0xf0df0000,0xf0df0018,0x0,0x0,0x0,0x2,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x20,0x200,0x200,0x220,0x0,0x200,0x0,0x0,0x0,0x0,0x200,0x0,0x0,0x200,0x0,0x0,0x0,0x0,0xe0f602,0x0,0x0,0x0,0x0,0xe0f602,0x0,0x0,0x4,0x0,0x0,0x0,0x4,0x0,0x4,0x800,0xf0df0000,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x800000,0x800000,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0xf0df0000,0xf0df0000,0x0,0x0,0x0,0x0,0x0,0x0,0xf0df0000,0x0,0x0,0x0,0x0,0xf0df0000,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0xf0000000,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,};
+	   jj_la1_1 = new int[] {0x0,0x0,0x0,0x0,0x40,0x0,0x0,0x0,0x1000000,0xf0fe0000,0xf0fe0000,0xf0fe0000,0x40,0x40,0xc0,0x0,0x0,0x40,0x80,0x40,0x40,0x0,0x0,0x20,0x80,0x2000000,0x4000000,0x0,0x0,0xf0fe0000,0x1000000,0xf0fe0000,0xf0fe0000,0xf0fe0018,0x18,0xf0fe0000,0xf0fe0018,0x0,0x0,0x0,0x2,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x20,0x200,0x200,0x220,0x0,0x200,0x0,0x0,0x0,0x0,0x200,0x0,0x0,0x200,0x0,0x0,0x0,0x0,0xc1f602,0x0,0x0,0x0,0x0,0xc1f602,0x0,0x0,0x4,0x0,0x0,0x0,0x4,0x0,0x4,0x800,0xf0fe0000,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x800000,0x800000,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0xf0fe0000,0xf0fe0000,0x0,0x0,0x0,0x0,0x0,0x0,0xf0fe0000,0x0,0x0,0x0,0x0,0xf0fe0000,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0xf0000000,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,};
 	}
 	private static void jj_la1_init_2() {
-	   jj_la1_2 = new int[] {0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0xff2f6fff,0xff2f6fff,0xff2f6fff,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0xff2f6fff,0x0,0xff2f6fff,0xff2f6fff,0xff2f6fff,0x0,0xff2f6fff,0xff2f6fff,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x1000,0x0,0x0,0x0,0x0,0x1000,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0xff2f6fff,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0xc00000,0xc00000,0x0,0xc00000,0xc00000,0x0,0x0,0x0,0x0,0x0,0xc00000,0x0,0x0,0x0,0x0,0xc00000,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x8000,0x8000,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0xff2f6fff,0xff2f6fff,0x0,0x0,0x0,0x0,0x0,0x0,0xff2f6fff,0x0,0x0,0x0,0x0,0xff2f6fff,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0xfff,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,};
+	   jj_la1_2 = new int[] {0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0xff2f6fff,0xff2f6fff,0xff2f6fff,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0xff2f6fff,0x0,0xff2f6fff,0xff2f6fff,0xff2f6fff,0x0,0xff2f6fff,0xff2f6fff,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x1000,0x0,0x0,0x0,0x0,0x1000,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0xff2f6fff,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0xc00000,0xc00000,0x0,0xc00000,0xc00000,0x0,0x0,0x0,0x0,0x0,0xc00000,0x0,0x0,0x0,0x0,0xc00000,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x8000,0x8000,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0xff2f6fff,0xff2f6fff,0x0,0x0,0x0,0x0,0x0,0x0,0xff2f6fff,0x0,0x0,0x0,0x0,0xff2f6fff,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0xfff,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,};
 	}
 	private static void jj_la1_init_3() {
-	   jj_la1_3 = new int[] {0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0xffffffff,0xffffffff,0xffffffff,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0xffffffff,0x0,0xffffffff,0xffffffff,0xffffffff,0x0,0xffffffff,0xffffffff,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0xffffffff,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0xc00,0xc00,0xffffffff,0xffffffff,0x0,0x0,0x0,0x0,0x0,0x0,0xffffffff,0x0,0x0,0x0,0x0,0xffffffff,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,};
+	   jj_la1_3 = new int[] {0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0xffffffff,0xffffffff,0xffffffff,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0xffffffff,0x0,0xffffffff,0xffffffff,0xffffffff,0x0,0xffffffff,0xffffffff,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0xffffffff,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0xc00,0xc00,0xffffffff,0xffffffff,0x0,0x0,0x0,0x0,0x0,0x0,0xffffffff,0x0,0x0,0x0,0x0,0xffffffff,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,};
 	}
 	private static void jj_la1_init_4() {
-	   jj_la1_4 = new int[] {0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x1800,0x0,0x1f7f,0x1f7f,0x1f7f,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x1800,0x0,0x0,0x0,0x0,0x0,0x0,0x77f,0x0,0x77f,0x77f,0x77f,0x0,0x77f,0x77f,0x0,0x0,0x0,0x0,0x0,0x9ffc000,0x9ffc000,0x4000000,0x10000000,0x4000000,0x4000000,0x4000000,0x4000000,0x4000000,0x4000000,0x0,0x4000,0xc000,0x0,0x0,0x0,0x40000000,0xc0000000,0x1800,0x0,0x0,0x1800,0x1800,0x1800,0x0,0x0,0x1800,0x0,0x1800,0x0,0x0,0x1800,0x0,0x0,0x1800,0x1800,0x0,0x0,0x4000000,0x0,0x1800,0x0,0x0,0x0,0x1800,0x0,0x1800,0x0,0x77f,0x0,0x0,0x0,0x0,0x0,0x0,0x1800,0x0,0x0,0x0,0x0,0x0,0x1800,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x1800,0x1800,0x0,0x0,0x1800,0x1800,0x1800,0x0,0x1800,0x0,0x0,0x0,0x1800,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x1f7f,0x1f7f,0x1800,0x0,0x0,0x0,0x0,0x0,0x77f,0x0,0x0,0x0,0x0,0x1f7f,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x1800,0x0,0x0,0x0,0x0,};
+	   jj_la1_4 = new int[] {0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x1800,0x0,0x1f7f,0x1f7f,0x1f7f,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x1800,0x0,0x0,0x0,0x0,0x0,0x0,0x77f,0x0,0x77f,0x77f,0x77f,0x0,0x77f,0x77f,0x0,0x0,0x0,0x0,0x0,0x9ffc000,0x9ffc000,0x4000000,0x10000000,0x4000000,0x4000000,0x4000000,0x4000000,0x4000000,0x4000000,0x0,0x4000,0xc000,0x0,0x0,0x0,0x40000000,0xc0000000,0x1800,0x0,0x0,0x1800,0x1800,0x1800,0x0,0x0,0x1800,0x0,0x1800,0x0,0x0,0x1800,0x0,0x0,0x1800,0x1800,0x0,0x0,0x4000000,0x0,0x1800,0x0,0x0,0x0,0x1800,0x0,0x1800,0x0,0x77f,0x0,0x0,0x0,0x0,0x0,0x0,0x1800,0x0,0x0,0x0,0x0,0x0,0x1800,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x1800,0x1800,0x0,0x0,0x1800,0x1800,0x1800,0x0,0x1800,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x1f7f,0x1f7f,0x1800,0x0,0x0,0x0,0x0,0x0,0x77f,0x0,0x0,0x0,0x0,0x1f7f,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x1800,0x0,0x0,0x0,0x0,};
 	}
 	private static void jj_la1_init_5() {
-	   jj_la1_5 = new int[] {0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x780ff8,0x0,0xf80ff8,0xf80ff8,0xf80ff8,0x0,0x0,0x4000000,0x0,0x0,0x0,0x4000000,0x0,0x0,0x0,0x780ff8,0x0,0x0,0x0,0x0,0x0,0x0,0x800000,0x0,0x800000,0x800000,0x800000,0x0,0x800000,0x800000,0x0,0x0,0x0,0x0,0x80000000,0x1,0x1,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x1,0x0,0x0,0x2,0x0,0x0,0x0,0x0,0x52f80ff8,0x0,0x0,0x52f80ff8,0x52f80ff8,0x52f80ff8,0x4000000,0x0,0x52f80ff8,0x0,0x52f80ff8,0x0,0x0,0x52f80ff8,0x4000000,0x0,0x52f80ff8,0x52f80ff8,0x0,0x4000000,0x0,0x2800000,0x780ff8,0x0,0x2800000,0x2800000,0x780ff8,0x2800000,0x780ff8,0x0,0x800000,0x0,0x0,0x2800000,0x0,0x2800000,0x0,0x52f80ff8,0x0,0x80000000,0x0,0x0,0x0,0x52f80ff8,0x800000,0x800000,0x80000000,0x800000,0x800000,0x0,0x0,0x0,0x0,0x4000000,0x800000,0x8000008,0x8000000,0x8,0x4000000,0x800000,0x0,0x0,0x800000,0x0,0x0,0x10800000,0x10800000,0x52f80ff8,0x52f80ff8,0x0,0x0,0x52f80ff8,0x52f80ff8,0x42780ff8,0x0,0x780ff8,0x0,0x40000000,0x0,0x42780ff8,0x0,0x0,0x0,0x0,0xfc0,0xfc0,0x0,0x0,0xfc0,0x0,0x0,0xf80ff8,0xf80ff8,0x780ff8,0x0,0x0,0x2800000,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0xf80ff8,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x80000000,0x80000000,0x80000000,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x2800000,0x0,0x0,0xff8,0x38,0x1c0,0xe00,0x0,0x780000,0x0,0x0,0x40000000,};
+	   jj_la1_5 = new int[] {0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x780ff8,0x0,0xf80ff8,0xf80ff8,0xf80ff8,0x0,0x0,0x4000000,0x0,0x0,0x0,0x4000000,0x0,0x0,0x0,0x780ff8,0x0,0x0,0x0,0x0,0x0,0x0,0x800000,0x0,0x800000,0x800000,0x800000,0x0,0x800000,0x800000,0x0,0x0,0x0,0x0,0x80000000,0x1,0x1,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x1,0x0,0x0,0x2,0x0,0x0,0x0,0x0,0x52f80ff8,0x0,0x0,0x52f80ff8,0x52f80ff8,0x52f80ff8,0x4000000,0x0,0x52f80ff8,0x0,0x52f80ff8,0x0,0x0,0x52f80ff8,0x4000000,0x0,0x52f80ff8,0x52f80ff8,0x0,0x4000000,0x0,0x2800000,0x780ff8,0x0,0x2800000,0x2800000,0x780ff8,0x2800000,0x780ff8,0x0,0x800000,0x0,0x0,0x2800000,0x0,0x2800000,0x0,0x52f80ff8,0x0,0x80000000,0x0,0x0,0x0,0x52f80ff8,0x800000,0x800000,0x80000000,0x800000,0x800000,0x0,0x0,0x0,0x0,0x4000000,0x800000,0x8000008,0x8000000,0x8,0x4000000,0x800000,0x0,0x0,0x800000,0x0,0x0,0x10800000,0x10800000,0x52f80ff8,0x52f80ff8,0x0,0x0,0x52f80ff8,0x52f80ff8,0x42780ff8,0x0,0x780ff8,0x0,0x40000000,0x0,0x0,0x0,0x0,0x0,0xfc0,0xfc0,0x0,0x0,0xfc0,0x0,0x0,0xf80ff8,0xf80ff8,0x780ff8,0x0,0x0,0x2800000,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0xf80ff8,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x80000000,0x80000000,0x80000000,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x2800000,0x0,0x0,0xff8,0x38,0x1c0,0xe00,0x0,0x780000,0x0,0x0,0x40000000,};
 	}
 	private static void jj_la1_init_6() {
-	   jj_la1_6 = new int[] {0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x80000,0x0,0x0,0x0,0x0,0x80000,0x0,0x0,0x0,0x0,0x1,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x200,0x0,0x2,0x200,0x200,0x200,0x0,0x2,0x200,0x0,0x200,0x2,0x0,0x200,0x0,0x2,0x200,0x200,0x2,0x0,0x0,0x0,0x200,0x0,0x0,0x0,0x200,0x0,0x200,0x0,0x0,0x0,0x1,0x0,0x1,0x0,0x2,0x200,0x0,0x0,0x0,0x0,0x1,0x200,0x2001000,0x2001000,0x0,0x2001000,0x2001000,0x1,0x1000000,0x2100000,0x2100000,0x100a0000,0x2001000,0x0,0x1,0xa0001,0x100a0000,0x1000,0x1000000,0x2000000,0x2000000,0x0,0x2000000,0x0,0x0,0x200,0x200,0x400,0x400,0x200,0x200,0x200,0x0,0x200,0x0,0x0,0x0,0x0,0x8000,0x10000,0xfc,0xfc,0x60000,0x0,0x180000,0x180000,0x60000,0x180000,0x180000,0x61200,0x200,0x200,0x1,0x1,0x0,0x1,0x1,0x0,0x1,0x1,0x1,0x0,0xe1200,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x200000,0x200000,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,};
+	   jj_la1_6 = new int[] {0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x80000,0x0,0x0,0x0,0x0,0x80000,0x0,0x0,0x0,0x0,0x1,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x200,0x0,0x2,0x200,0x200,0x200,0x0,0x2,0x200,0x0,0x200,0x2,0x0,0x200,0x0,0x2,0x200,0x200,0x2,0x0,0x0,0x0,0x200,0x0,0x0,0x0,0x200,0x0,0x200,0x0,0x0,0x0,0x1,0x0,0x1,0x0,0x2,0x200,0x0,0x0,0x0,0x0,0x1,0x200,0x2001000,0x2001000,0x0,0x2001000,0x2001000,0x1,0x1000000,0x2100000,0x2100000,0x100a0000,0x2001000,0x0,0x1,0xa0001,0x100a0000,0x1000,0x1000000,0x2000000,0x2000000,0x0,0x2000000,0x0,0x0,0x200,0x200,0x400,0x400,0x200,0x200,0x200,0x0,0x200,0x0,0x0,0x0,0x8000,0x10000,0xfc,0xfc,0x60000,0x0,0x180000,0x180000,0x60000,0x180000,0x180000,0x61200,0x200,0x200,0x1,0x1,0x0,0x1,0x1,0x0,0x1,0x1,0x1,0x0,0xe1200,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x200000,0x200000,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,};
 	}
 	private static void jj_la1_init_7() {
-	   jj_la1_7 = new int[] {0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,};
+	   jj_la1_7 = new int[] {0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,};
 	}
   final private JJCalls[] jj_2_rtns = new JJCalls[5];
   private boolean jj_rescan = false;
@@ -8103,7 +8055,7 @@
 	 token = new Token();
 	 jj_ntk = -1;
 	 jj_gen = 0;
-	 for (int i = 0; i < 195; i++) jj_la1[i] = -1;
+	 for (int i = 0; i < 194; i++) jj_la1[i] = -1;
 	 for (int i = 0; i < jj_2_rtns.length; i++) jj_2_rtns[i] = new JJCalls();
   }
 
@@ -8118,7 +8070,7 @@
 	 token = new Token();
 	 jj_ntk = -1;
 	 jj_gen = 0;
-	 for (int i = 0; i < 195; i++) jj_la1[i] = -1;
+	 for (int i = 0; i < 194; i++) jj_la1[i] = -1;
 	 for (int i = 0; i < jj_2_rtns.length; i++) jj_2_rtns[i] = new JJCalls();
   }
 
@@ -8129,7 +8081,7 @@
 	 token = new Token();
 	 jj_ntk = -1;
 	 jj_gen = 0;
-	 for (int i = 0; i < 195; i++) jj_la1[i] = -1;
+	 for (int i = 0; i < 194; i++) jj_la1[i] = -1;
 	 for (int i = 0; i < jj_2_rtns.length; i++) jj_2_rtns[i] = new JJCalls();
   }
 
@@ -8148,7 +8100,7 @@
 	 token = new Token();
 	 jj_ntk = -1;
 	 jj_gen = 0;
-	 for (int i = 0; i < 195; i++) jj_la1[i] = -1;
+	 for (int i = 0; i < 194; i++) jj_la1[i] = -1;
 	 for (int i = 0; i < jj_2_rtns.length; i++) jj_2_rtns[i] = new JJCalls();
   }
 
@@ -8158,7 +8110,7 @@
 	 token = new Token();
 	 jj_ntk = -1;
 	 jj_gen = 0;
-	 for (int i = 0; i < 195; i++) jj_la1[i] = -1;
+	 for (int i = 0; i < 194; i++) jj_la1[i] = -1;
 	 for (int i = 0; i < jj_2_rtns.length; i++) jj_2_rtns[i] = new JJCalls();
   }
 
@@ -8168,7 +8120,7 @@
 	 token = new Token();
 	 jj_ntk = -1;
 	 jj_gen = 0;
-	 for (int i = 0; i < 195; i++) jj_la1[i] = -1;
+	 for (int i = 0; i < 194; i++) jj_la1[i] = -1;
 	 for (int i = 0; i < jj_2_rtns.length; i++) jj_2_rtns[i] = new JJCalls();
   }
 
@@ -8304,7 +8256,7 @@
 	   la1tokens[jj_kind] = true;
 	   jj_kind = -1;
 	 }
-	 for (int i = 0; i < 195; i++) {
+	 for (int i = 0; i < 194; i++) {
 	   if (jj_la1[i] == jj_gen) {
 		 for (int j = 0; j < 32; j++) {
 		   if ((jj_la1_0[i] & (1<<j)) != 0) {
diff --git a/jena-arq/src/main/java/org/apache/jena/sparql/lang/arq/ARQParserConstants.java b/jena-arq/src/main/java/org/apache/jena/sparql/lang/arq/ARQParserConstants.java
index 274959d..047bd0d 100644
--- a/jena-arq/src/main/java/org/apache/jena/sparql/lang/arq/ARQParserConstants.java
+++ b/jena-arq/src/main/java/org/apache/jena/sparql/lang/arq/ARQParserConstants.java
@@ -95,17 +95,17 @@
   /** RegularExpression Id. */
   int LET = 47;
   /** RegularExpression Id. */
-  int TRIPLE = 48;
+  int LATERAL = 48;
   /** RegularExpression Id. */
-  int IS_TRIPLE = 49;
+  int TRIPLE = 49;
   /** RegularExpression Id. */
-  int SUBJECT = 50;
+  int IS_TRIPLE = 50;
   /** RegularExpression Id. */
-  int PREDICATE = 51;
+  int SUBJECT = 51;
   /** RegularExpression Id. */
-  int OBJECT = 52;
+  int PREDICATE = 52;
   /** RegularExpression Id. */
-  int LATERAL = 53;
+  int OBJECT = 53;
   /** RegularExpression Id. */
   int EXISTS = 54;
   /** RegularExpression Id. */
@@ -518,12 +518,12 @@
     "\"bind\"",
     "\"service\"",
     "\"LET\"",
+    "\"LATERAL\"",
     "\"TRIPLE\"",
     "\"isTRIPLE\"",
     "\"SUBJECT\"",
     "\"PREDICATE\"",
     "\"OBJECT\"",
-    "\"LATERAL\"",
     "\"exists\"",
     "\"not\"",
     "\"as\"",
diff --git a/jena-arq/src/main/java/org/apache/jena/sparql/lang/arq/ARQParserTokenManager.java b/jena-arq/src/main/java/org/apache/jena/sparql/lang/arq/ARQParserTokenManager.java
index bbfe142..6f71c90 100644
--- a/jena-arq/src/main/java/org/apache/jena/sparql/lang/arq/ARQParserTokenManager.java
+++ b/jena-arq/src/main/java/org/apache/jena/sparql/lang/arq/ARQParserTokenManager.java
@@ -114,25 +114,25 @@
       case 72:
          return jjMoveStringLiteralDfa1_0(0x400000000000000L, 0x800000000000000L, 0x0L, 0x0L);
       case 73:
-         return jjMoveStringLiteralDfa1_0(0x2000000000000L, 0x807c0058000L, 0x10004000L, 0x0L);
+         return jjMoveStringLiteralDfa1_0(0x4000000000000L, 0x807c0058000L, 0x10004000L, 0x0L);
       case 74:
          return jjMoveStringLiteralDfa1_0(0x2000000L, 0x0L, 0x0L, 0x0L);
       case 76:
-         return jjMoveStringLiteralDfa1_0(0x20800020000000L, 0x2000030000000L, 0x80000L, 0x0L);
+         return jjMoveStringLiteralDfa1_0(0x1800020000000L, 0x2000030000000L, 0x80000L, 0x0L);
       case 77:
          return jjMoveStringLiteralDfa1_0(0xc000100000000000L, 0x120004000040000cL, 0x2800020L, 0x0L);
       case 78:
          return jjMoveStringLiteralDfa1_0(0x80002000000000L, 0x0L, 0x2L, 0x0L);
       case 79:
-         return jjMoveStringLiteralDfa1_0(0x100400c0000000L, 0x0L, 0x0L, 0x0L);
+         return jjMoveStringLiteralDfa1_0(0x200400c0000000L, 0x0L, 0x0L, 0x0L);
       case 80:
-         return jjMoveStringLiteralDfa1_0(0x8000000200000L, 0x0L, 0x0L, 0x0L);
+         return jjMoveStringLiteralDfa1_0(0x10000000200000L, 0x0L, 0x0L, 0x0L);
       case 82:
          return jjMoveStringLiteralDfa1_0(0x1000000L, 0x822800000000L, 0x0L, 0x0L);
       case 83:
-         return jjMoveStringLiteralDfa1_0(0x804400000400000L, 0x20f0601007800471L, 0x40007c8L, 0x0L);
+         return jjMoveStringLiteralDfa1_0(0x808400000400000L, 0x20f0601007800471L, 0x40007c8L, 0x0L);
       case 84:
-         return jjMoveStringLiteralDfa1_0(0x1000000000000L, 0xc000000000000000L, 0x20000800L, 0x0L);
+         return jjMoveStringLiteralDfa1_0(0x2000000000000L, 0xc000000000000000L, 0x20000800L, 0x0L);
       case 85:
          return jjMoveStringLiteralDfa1_0(0x80400000000L, 0x1000000080000L, 0x200000004L, 0x0L);
       case 86:
@@ -168,25 +168,25 @@
       case 104:
          return jjMoveStringLiteralDfa1_0(0x400000000000000L, 0x800000000000000L, 0x0L, 0x0L);
       case 105:
-         return jjMoveStringLiteralDfa1_0(0x2000000000000L, 0x807c0058000L, 0x10004000L, 0x0L);
+         return jjMoveStringLiteralDfa1_0(0x4000000000000L, 0x807c0058000L, 0x10004000L, 0x0L);
       case 106:
          return jjMoveStringLiteralDfa1_0(0x2000000L, 0x0L, 0x0L, 0x0L);
       case 108:
-         return jjMoveStringLiteralDfa1_0(0x20800020000000L, 0x2000030000000L, 0x80000L, 0x0L);
+         return jjMoveStringLiteralDfa1_0(0x1800020000000L, 0x2000030000000L, 0x80000L, 0x0L);
       case 109:
          return jjMoveStringLiteralDfa1_0(0xc000100000000000L, 0x120004000040000cL, 0x2800020L, 0x0L);
       case 110:
          return jjMoveStringLiteralDfa1_0(0x80002000000000L, 0x0L, 0x2L, 0x0L);
       case 111:
-         return jjMoveStringLiteralDfa1_0(0x100400c0000000L, 0x0L, 0x0L, 0x0L);
+         return jjMoveStringLiteralDfa1_0(0x200400c0000000L, 0x0L, 0x0L, 0x0L);
       case 112:
-         return jjMoveStringLiteralDfa1_0(0x8000000200000L, 0x0L, 0x0L, 0x0L);
+         return jjMoveStringLiteralDfa1_0(0x10000000200000L, 0x0L, 0x0L, 0x0L);
       case 114:
          return jjMoveStringLiteralDfa1_0(0x1000000L, 0x822800000000L, 0x0L, 0x0L);
       case 115:
-         return jjMoveStringLiteralDfa1_0(0x804400000400000L, 0x20f0601007800471L, 0x40007c8L, 0x0L);
+         return jjMoveStringLiteralDfa1_0(0x808400000400000L, 0x20f0601007800471L, 0x40007c8L, 0x0L);
       case 116:
-         return jjMoveStringLiteralDfa1_0(0x1000000000000L, 0xc000000000000000L, 0x20000800L, 0x0L);
+         return jjMoveStringLiteralDfa1_0(0x2000000000000L, 0xc000000000000000L, 0x20000800L, 0x0L);
       case 117:
          return jjMoveStringLiteralDfa1_0(0x80400000000L, 0x1000000080000L, 0x200000004L, 0x0L);
       case 118:
@@ -277,9 +277,9 @@
          }
          break;
       case 65:
-         return jjMoveStringLiteralDfa2_0(active0, 0x8420002200100000L, active1, 0x400003038300780L, active2, 0x3000L, active3, 0L);
+         return jjMoveStringLiteralDfa2_0(active0, 0x8401002200100000L, active1, 0x400003038300780L, active2, 0x3000L, active3, 0L);
       case 66:
-         return jjMoveStringLiteralDfa2_0(active0, 0x10000000000000L, active1, 0x4000000000L, active2, 0L, active3, 0L);
+         return jjMoveStringLiteralDfa2_0(active0, 0x20000000000000L, active1, 0x4000000000L, active2, 0L, active3, 0L);
       case 67:
          return jjMoveStringLiteralDfa2_0(active0, 0L, active1, 0x3000000000000L, active2, 0L, active3, 0L);
       case 68:
@@ -318,18 +318,18 @@
       case 80:
          return jjMoveStringLiteralDfa2_0(active0, 0x40000000000L, active1, 0L, active2, 0L, active3, 0L);
       case 82:
-         return jjMoveStringLiteralDfa2_0(active0, 0x209024080200000L, active1, 0xc0800L, active2, 0x8200800L, active3, 0L);
+         return jjMoveStringLiteralDfa2_0(active0, 0x212024080200000L, active1, 0xc0800L, active2, 0x8200800L, active3, 0L);
       case 83:
          if ((active0 & 0x100000000000000L) != 0L)
          {
             jjmatchedKind = 56;
             jjmatchedPos = 1;
          }
-         return jjMoveStringLiteralDfa2_0(active0, 0x2000812000000L, active1, 0x7c0000000L, active2, 0x200000000L, active3, 0L);
+         return jjMoveStringLiteralDfa2_0(active0, 0x4000812000000L, active1, 0x7c0000000L, active2, 0x200000000L, active3, 0L);
       case 84:
          return jjMoveStringLiteralDfa2_0(active0, 0L, active1, 0xf0400007000070L, active2, 0x8L, active3, 0L);
       case 85:
-         return jjMoveStringLiteralDfa2_0(active0, 0x4000000000000L, active1, 0x200000400001L, active2, 0x4L, active3, 0L);
+         return jjMoveStringLiteralDfa2_0(active0, 0x8000000000000L, active1, 0x200000400001L, active2, 0x4L, active3, 0L);
       case 86:
          return jjMoveStringLiteralDfa2_0(active0, 0L, active1, 0x2L, active2, 0L, active3, 0L);
       case 88:
@@ -356,9 +356,9 @@
          }
          break;
       case 97:
-         return jjMoveStringLiteralDfa2_0(active0, 0x8420002200100000L, active1, 0x400003038300780L, active2, 0x3000L, active3, 0L);
+         return jjMoveStringLiteralDfa2_0(active0, 0x8401002200100000L, active1, 0x400003038300780L, active2, 0x3000L, active3, 0L);
       case 98:
-         return jjMoveStringLiteralDfa2_0(active0, 0x10000000000000L, active1, 0x4000000000L, active2, 0L, active3, 0L);
+         return jjMoveStringLiteralDfa2_0(active0, 0x20000000000000L, active1, 0x4000000000L, active2, 0L, active3, 0L);
       case 99:
          return jjMoveStringLiteralDfa2_0(active0, 0L, active1, 0x3000000000000L, active2, 0L, active3, 0L);
       case 100:
@@ -397,18 +397,18 @@
       case 112:
          return jjMoveStringLiteralDfa2_0(active0, 0x40000000000L, active1, 0L, active2, 0L, active3, 0L);
       case 114:
-         return jjMoveStringLiteralDfa2_0(active0, 0x209024080200000L, active1, 0xc0800L, active2, 0x8200800L, active3, 0L);
+         return jjMoveStringLiteralDfa2_0(active0, 0x212024080200000L, active1, 0xc0800L, active2, 0x8200800L, active3, 0L);
       case 115:
          if ((active0 & 0x100000000000000L) != 0L)
          {
             jjmatchedKind = 56;
             jjmatchedPos = 1;
          }
-         return jjMoveStringLiteralDfa2_0(active0, 0x2000812000000L, active1, 0x7c0000000L, active2, 0x200000000L, active3, 0L);
+         return jjMoveStringLiteralDfa2_0(active0, 0x4000812000000L, active1, 0x7c0000000L, active2, 0x200000000L, active3, 0L);
       case 116:
          return jjMoveStringLiteralDfa2_0(active0, 0L, active1, 0xf0400007000070L, active2, 0x8L, active3, 0L);
       case 117:
-         return jjMoveStringLiteralDfa2_0(active0, 0x4000000000000L, active1, 0x200000400001L, active2, 0x4L, active3, 0L);
+         return jjMoveStringLiteralDfa2_0(active0, 0x8000000000000L, active1, 0x200000400001L, active2, 0x4L, active3, 0L);
       case 118:
          return jjMoveStringLiteralDfa2_0(active0, 0L, active1, 0x2L, active2, 0L, active3, 0L);
       case 120:
@@ -470,7 +470,7 @@
       case 65:
          return jjMoveStringLiteralDfa3_0(active0, 0x20000000000L, active1, 0x103000000004000L, active2, 0x807c0L);
       case 66:
-         return jjMoveStringLiteralDfa3_0(active0, 0x4000000000000L, active1, 0x200100000000L, active2, 0L);
+         return jjMoveStringLiteralDfa3_0(active0, 0x8000000000000L, active1, 0x200100000000L, active2, 0L);
       case 67:
          if ((active0 & 0x800000000L) != 0L)
          {
@@ -496,7 +496,7 @@
          }
          return jjMoveStringLiteralDfa3_0(active0, 0x481000000L, active1, 0x7cL, active2, 0L);
       case 69:
-         return jjMoveStringLiteralDfa3_0(active0, 0x8008000200000L, active1, 0L, active2, 0x300000L);
+         return jjMoveStringLiteralDfa3_0(active0, 0x10008000200000L, active1, 0L, active2, 0x300000L);
       case 70:
          return jjMoveStringLiteralDfa3_0(active0, 0x40000000L, active1, 0L, active2, 0x40000000L);
       case 71:
@@ -522,9 +522,9 @@
             jjmatchedKind = 83;
             jjmatchedPos = 2;
          }
-         return jjMoveStringLiteralDfa3_0(active0, 0x41080000000000L, active1, 0x88080000000L, active2, 0x200000004L);
+         return jjMoveStringLiteralDfa3_0(active0, 0x42080000000000L, active1, 0x88080000000L, active2, 0x200000004L);
       case 74:
-         return jjMoveStringLiteralDfa3_0(active0, 0x10000000000000L, active1, 0L, active2, 0x1L);
+         return jjMoveStringLiteralDfa3_0(active0, 0x20000000000000L, active1, 0L, active2, 0x1L);
       case 75:
          if ((active0 & 0x10000000L) != 0L)
          {
@@ -582,7 +582,7 @@
             jjmatchedKind = 55;
             jjmatchedPos = 2;
          }
-         return jjMoveStringLiteralDfa3_0(active0, 0x22040000000000L, active1, 0x8000000L, active2, 0x112002000L);
+         return jjMoveStringLiteralDfa3_0(active0, 0x5040000000000L, active1, 0x8000000L, active2, 0x112002000L);
       case 85:
          return jjMoveStringLiteralDfa3_0(active0, 0x2000000000000000L, active1, 0x800020040002000L, active2, 0x800L);
       case 86:
@@ -611,7 +611,7 @@
       case 97:
          return jjMoveStringLiteralDfa3_0(active0, 0x20000000000L, active1, 0x103000000004000L, active2, 0x807c0L);
       case 98:
-         return jjMoveStringLiteralDfa3_0(active0, 0x4000000000000L, active1, 0x200100000000L, active2, 0L);
+         return jjMoveStringLiteralDfa3_0(active0, 0x8000000000000L, active1, 0x200100000000L, active2, 0L);
       case 99:
          if ((active0 & 0x800000000L) != 0L)
          {
@@ -637,7 +637,7 @@
          }
          return jjMoveStringLiteralDfa3_0(active0, 0x481000000L, active1, 0x7cL, active2, 0L);
       case 101:
-         return jjMoveStringLiteralDfa3_0(active0, 0x8008000200000L, active1, 0L, active2, 0x300000L);
+         return jjMoveStringLiteralDfa3_0(active0, 0x10008000200000L, active1, 0L, active2, 0x300000L);
       case 102:
          return jjMoveStringLiteralDfa3_0(active0, 0x40000000L, active1, 0L, active2, 0x40000000L);
       case 103:
@@ -663,9 +663,9 @@
             jjmatchedKind = 83;
             jjmatchedPos = 2;
          }
-         return jjMoveStringLiteralDfa3_0(active0, 0x41080000000000L, active1, 0x88080000000L, active2, 0x200000004L);
+         return jjMoveStringLiteralDfa3_0(active0, 0x42080000000000L, active1, 0x88080000000L, active2, 0x200000004L);
       case 106:
-         return jjMoveStringLiteralDfa3_0(active0, 0x10000000000000L, active1, 0L, active2, 0x1L);
+         return jjMoveStringLiteralDfa3_0(active0, 0x20000000000000L, active1, 0L, active2, 0x1L);
       case 107:
          if ((active0 & 0x10000000L) != 0L)
          {
@@ -723,7 +723,7 @@
             jjmatchedKind = 55;
             jjmatchedPos = 2;
          }
-         return jjMoveStringLiteralDfa3_0(active0, 0x22040000000000L, active1, 0x8000000L, active2, 0x112002000L);
+         return jjMoveStringLiteralDfa3_0(active0, 0x5040000000000L, active1, 0x8000000L, active2, 0x112002000L);
       case 117:
          return jjMoveStringLiteralDfa3_0(active0, 0x2000000000000000L, active1, 0x800020040002000L, active2, 0x800L);
       case 118:
@@ -818,7 +818,7 @@
             jjmatchedKind = 147;
             jjmatchedPos = 3;
          }
-         return jjMoveStringLiteralDfa4_0(active0, 0x8000000000000L, active1, 0x4020000L, active2, 0L);
+         return jjMoveStringLiteralDfa4_0(active0, 0x10000000000000L, active1, 0x4020000L, active2, 0L);
       case 69:
          if ((active0 & 0x100000L) != 0L)
          {
@@ -840,7 +840,7 @@
             jjmatchedKind = 151;
             jjmatchedPos = 3;
          }
-         return jjMoveStringLiteralDfa4_0(active0, 0x30002480400000L, active1, 0x4020001800000070L, active2, 0x400c000L);
+         return jjMoveStringLiteralDfa4_0(active0, 0x21002480400000L, active1, 0x4020001800000070L, active2, 0x400c000L);
       case 70:
          return jjMoveStringLiteralDfa4_0(active0, 0x200000L, active1, 0L, active2, 0L);
       case 71:
@@ -860,7 +860,7 @@
       case 73:
          return jjMoveStringLiteralDfa4_0(active0, 0x400040020000000L, active1, 0x200000084L, active2, 0L);
       case 74:
-         return jjMoveStringLiteralDfa4_0(active0, 0x4000000000000L, active1, 0L, active2, 0L);
+         return jjMoveStringLiteralDfa4_0(active0, 0x8000000000000L, active1, 0L, active2, 0L);
       case 76:
          if ((active1 & 0x200000L) != 0L)
          {
@@ -900,14 +900,14 @@
             jjmatchedKind = 155;
             jjmatchedPos = 3;
          }
-         return jjMoveStringLiteralDfa4_0(active0, 0x1020000000000L, active1, 0x400L, active2, 0L);
+         return jjMoveStringLiteralDfa4_0(active0, 0x2020000000000L, active1, 0x400L, active2, 0L);
       case 82:
          if ((active1 & 0x100000000000000L) != 0L)
          {
             jjmatchedKind = 120;
             jjmatchedPos = 3;
          }
-         return jjMoveStringLiteralDfa4_0(active0, 0x2008000000000L, active1, 0x8000000c0800000L, active2, 0L);
+         return jjMoveStringLiteralDfa4_0(active0, 0x4008000000000L, active1, 0x8000000c0800000L, active2, 0L);
       case 83:
          return jjMoveStringLiteralDfa4_0(active0, 0x40000048000000L, active1, 0x13200000000000L, active2, 0x1010L);
       case 84:
@@ -977,7 +977,7 @@
             jjmatchedKind = 147;
             jjmatchedPos = 3;
          }
-         return jjMoveStringLiteralDfa4_0(active0, 0x8000000000000L, active1, 0x4020000L, active2, 0L);
+         return jjMoveStringLiteralDfa4_0(active0, 0x10000000000000L, active1, 0x4020000L, active2, 0L);
       case 101:
          if ((active0 & 0x100000L) != 0L)
          {
@@ -999,7 +999,7 @@
             jjmatchedKind = 151;
             jjmatchedPos = 3;
          }
-         return jjMoveStringLiteralDfa4_0(active0, 0x30002480400000L, active1, 0x4020001800000070L, active2, 0x400c000L);
+         return jjMoveStringLiteralDfa4_0(active0, 0x21002480400000L, active1, 0x4020001800000070L, active2, 0x400c000L);
       case 102:
          return jjMoveStringLiteralDfa4_0(active0, 0x200000L, active1, 0L, active2, 0L);
       case 103:
@@ -1019,7 +1019,7 @@
       case 105:
          return jjMoveStringLiteralDfa4_0(active0, 0x400040020000000L, active1, 0x200000084L, active2, 0L);
       case 106:
-         return jjMoveStringLiteralDfa4_0(active0, 0x4000000000000L, active1, 0L, active2, 0L);
+         return jjMoveStringLiteralDfa4_0(active0, 0x8000000000000L, active1, 0L, active2, 0L);
       case 108:
          if ((active1 & 0x200000L) != 0L)
          {
@@ -1059,14 +1059,14 @@
             jjmatchedKind = 155;
             jjmatchedPos = 3;
          }
-         return jjMoveStringLiteralDfa4_0(active0, 0x1020000000000L, active1, 0x400L, active2, 0L);
+         return jjMoveStringLiteralDfa4_0(active0, 0x2020000000000L, active1, 0x400L, active2, 0L);
       case 114:
          if ((active1 & 0x100000000000000L) != 0L)
          {
             jjmatchedKind = 120;
             jjmatchedPos = 3;
          }
-         return jjMoveStringLiteralDfa4_0(active0, 0x2008000000000L, active1, 0x8000000c0800000L, active2, 0L);
+         return jjMoveStringLiteralDfa4_0(active0, 0x4008000000000L, active1, 0x8000000c0800000L, active2, 0L);
       case 115:
          return jjMoveStringLiteralDfa4_0(active0, 0x40000048000000L, active1, 0x13200000000000L, active2, 0x1010L);
       case 116:
@@ -1117,7 +1117,7 @@
       case 65:
          return jjMoveStringLiteralDfa5_0(active0, 0L, active1, 0x8900102000084L, active2, 0L);
       case 67:
-         return jjMoveStringLiteralDfa5_0(active0, 0x10000001400000L, active1, 0L, active2, 0L);
+         return jjMoveStringLiteralDfa5_0(active0, 0x20000001400000L, active1, 0L, active2, 0L);
       case 68:
          if ((active0 & 0x2000000000L) != 0L)
          {
@@ -1161,7 +1161,7 @@
             jjmatchedKind = 140;
             jjmatchedPos = 4;
          }
-         return jjMoveStringLiteralDfa5_0(active0, 0x4000240000000L, active1, 0x40400000005000L, active2, 0L);
+         return jjMoveStringLiteralDfa5_0(active0, 0x8000240000000L, active1, 0x40400000005000L, active2, 0L);
       case 70:
          if ((active0 & 0x400000000L) != 0L)
          {
@@ -1204,9 +1204,9 @@
             jjmatchedKind = 95;
             jjmatchedPos = 4;
          }
-         return jjMoveStringLiteralDfa5_0(active0, 0xa400000a00000L, active1, 0L, active2, 0x10L);
+         return jjMoveStringLiteralDfa5_0(active0, 0x14400000a00000L, active1, 0L, active2, 0x10L);
       case 76:
-         return jjMoveStringLiteralDfa5_0(active0, 0x1000000000000L, active1, 0x400L, active2, 0L);
+         return jjMoveStringLiteralDfa5_0(active0, 0x2000000000000L, active1, 0x400L, active2, 0L);
       case 77:
          return jjMoveStringLiteralDfa5_0(active0, 0L, active1, 0x420000000L, active2, 0L);
       case 78:
@@ -1241,7 +1241,7 @@
             jjmatchedKind = 148;
             jjmatchedPos = 4;
          }
-         return jjMoveStringLiteralDfa5_0(active0, 0x820000004000000L, active1, 0L, active2, 0x4000L);
+         return jjMoveStringLiteralDfa5_0(active0, 0x801000004000000L, active1, 0L, active2, 0x4000L);
       case 83:
          if ((active0 & 0x100000000000L) != 0L)
          {
@@ -1292,7 +1292,7 @@
       case 97:
          return jjMoveStringLiteralDfa5_0(active0, 0L, active1, 0x8900102000084L, active2, 0L);
       case 99:
-         return jjMoveStringLiteralDfa5_0(active0, 0x10000001400000L, active1, 0L, active2, 0L);
+         return jjMoveStringLiteralDfa5_0(active0, 0x20000001400000L, active1, 0L, active2, 0L);
       case 100:
          if ((active0 & 0x2000000000L) != 0L)
          {
@@ -1336,7 +1336,7 @@
             jjmatchedKind = 140;
             jjmatchedPos = 4;
          }
-         return jjMoveStringLiteralDfa5_0(active0, 0x4000240000000L, active1, 0x40400000005000L, active2, 0L);
+         return jjMoveStringLiteralDfa5_0(active0, 0x8000240000000L, active1, 0x40400000005000L, active2, 0L);
       case 102:
          if ((active0 & 0x400000000L) != 0L)
          {
@@ -1379,9 +1379,9 @@
             jjmatchedKind = 95;
             jjmatchedPos = 4;
          }
-         return jjMoveStringLiteralDfa5_0(active0, 0xa400000a00000L, active1, 0L, active2, 0x10L);
+         return jjMoveStringLiteralDfa5_0(active0, 0x14400000a00000L, active1, 0L, active2, 0x10L);
       case 108:
-         return jjMoveStringLiteralDfa5_0(active0, 0x1000000000000L, active1, 0x400L, active2, 0L);
+         return jjMoveStringLiteralDfa5_0(active0, 0x2000000000000L, active1, 0x400L, active2, 0L);
       case 109:
          return jjMoveStringLiteralDfa5_0(active0, 0L, active1, 0x420000000L, active2, 0L);
       case 110:
@@ -1416,7 +1416,7 @@
             jjmatchedKind = 148;
             jjmatchedPos = 4;
          }
-         return jjMoveStringLiteralDfa5_0(active0, 0x820000004000000L, active1, 0L, active2, 0x4000L);
+         return jjMoveStringLiteralDfa5_0(active0, 0x801000004000000L, active1, 0L, active2, 0x4000L);
       case 115:
          if ((active0 & 0x100000000000L) != 0L)
          {
@@ -1505,15 +1505,15 @@
          }
          break;
       case 65:
-         return jjMoveStringLiteralDfa6_0(active0, 0x820000000000000L, active1, 0x10000020000100L, active2, 0L);
+         return jjMoveStringLiteralDfa6_0(active0, 0x801000000000000L, active1, 0x10000020000100L, active2, 0L);
       case 67:
-         return jjMoveStringLiteralDfa6_0(active0, 0xc400000000000L, active1, 0x800000000000L, active2, 0L);
+         return jjMoveStringLiteralDfa6_0(active0, 0x18400000000000L, active1, 0x800000000000L, active2, 0L);
       case 68:
          return jjMoveStringLiteralDfa6_0(active0, 0L, active1, 0x2020000000000000L, active2, 0L);
       case 69:
-         if ((active0 & 0x1000000000000L) != 0L)
+         if ((active0 & 0x2000000000000L) != 0L)
          {
-            jjmatchedKind = 48;
+            jjmatchedKind = 49;
             jjmatchedPos = 5;
          }
          else if ((active1 & 0x400L) != 0L)
@@ -1560,7 +1560,7 @@
       case 79:
          return jjMoveStringLiteralDfa6_0(active0, 0L, active1, 0x4000000000000200L, active2, 0x10L);
       case 80:
-         return jjMoveStringLiteralDfa6_0(active0, 0x2000000000000L, active1, 0L, active2, 0L);
+         return jjMoveStringLiteralDfa6_0(active0, 0x4000000000000L, active1, 0L, active2, 0L);
       case 82:
          if ((active1 & 0x1000L) != 0L)
          {
@@ -1596,9 +1596,9 @@
             jjmatchedKind = 30;
             jjmatchedPos = 5;
          }
-         else if ((active0 & 0x10000000000000L) != 0L)
+         else if ((active0 & 0x20000000000000L) != 0L)
          {
-            jjmatchedKind = 52;
+            jjmatchedKind = 53;
             jjmatchedPos = 5;
          }
          else if ((active1 & 0x100000000000L) != 0L)
@@ -1634,15 +1634,15 @@
       case 95:
          return jjMoveStringLiteralDfa6_0(active0, 0L, active1, 0x860L, active2, 0L);
       case 97:
-         return jjMoveStringLiteralDfa6_0(active0, 0x820000000000000L, active1, 0x10000020000100L, active2, 0L);
+         return jjMoveStringLiteralDfa6_0(active0, 0x801000000000000L, active1, 0x10000020000100L, active2, 0L);
       case 99:
-         return jjMoveStringLiteralDfa6_0(active0, 0xc400000000000L, active1, 0x800000000000L, active2, 0L);
+         return jjMoveStringLiteralDfa6_0(active0, 0x18400000000000L, active1, 0x800000000000L, active2, 0L);
       case 100:
          return jjMoveStringLiteralDfa6_0(active0, 0L, active1, 0x2020000000000000L, active2, 0L);
       case 101:
-         if ((active0 & 0x1000000000000L) != 0L)
+         if ((active0 & 0x2000000000000L) != 0L)
          {
-            jjmatchedKind = 48;
+            jjmatchedKind = 49;
             jjmatchedPos = 5;
          }
          else if ((active1 & 0x400L) != 0L)
@@ -1689,7 +1689,7 @@
       case 111:
          return jjMoveStringLiteralDfa6_0(active0, 0L, active1, 0x4000000000000200L, active2, 0x10L);
       case 112:
-         return jjMoveStringLiteralDfa6_0(active0, 0x2000000000000L, active1, 0L, active2, 0L);
+         return jjMoveStringLiteralDfa6_0(active0, 0x4000000000000L, active1, 0L, active2, 0L);
       case 114:
          if ((active1 & 0x1000L) != 0L)
          {
@@ -1725,9 +1725,9 @@
             jjmatchedKind = 30;
             jjmatchedPos = 5;
          }
-         else if ((active0 & 0x10000000000000L) != 0L)
+         else if ((active0 & 0x20000000000000L) != 0L)
          {
-            jjmatchedKind = 52;
+            jjmatchedKind = 53;
             jjmatchedPos = 5;
          }
          else if ((active1 & 0x100000000000L) != 0L)
@@ -1775,7 +1775,7 @@
    switch(curChar)
    {
       case 65:
-         return jjMoveStringLiteralDfa7_0(active0, 0x8040000000000L, active1, 0L, active2, 0L);
+         return jjMoveStringLiteralDfa7_0(active0, 0x10040000000000L, active1, 0L, active2, 0L);
       case 66:
          return jjMoveStringLiteralDfa7_0(active0, 0x4000000L, active1, 0L, active2, 0L);
       case 67:
@@ -1819,12 +1819,12 @@
          }
          break;
       case 76:
-         if ((active0 & 0x20000000000000L) != 0L)
+         if ((active0 & 0x1000000000000L) != 0L)
          {
-            jjmatchedKind = 53;
+            jjmatchedKind = 48;
             jjmatchedPos = 6;
          }
-         return jjMoveStringLiteralDfa7_0(active0, 0x2000000000000L, active1, 0L, active2, 0L);
+         return jjMoveStringLiteralDfa7_0(active0, 0x4000000000000L, active1, 0L, active2, 0L);
       case 77:
          return jjMoveStringLiteralDfa7_0(active0, 0L, active1, 0x100L, active2, 0L);
       case 78:
@@ -1863,9 +1863,9 @@
          }
          return jjMoveStringLiteralDfa7_0(active0, 0L, active1, 0x800020L, active2, 0L);
       case 84:
-         if ((active0 & 0x4000000000000L) != 0L)
+         if ((active0 & 0x8000000000000L) != 0L)
          {
-            jjmatchedKind = 50;
+            jjmatchedKind = 51;
             jjmatchedPos = 6;
          }
          else if ((active2 & 0x40000000L) != 0L)
@@ -1879,7 +1879,7 @@
       case 95:
          return jjMoveStringLiteralDfa7_0(active0, 0L, active1, 0x4000000000000L, active2, 0L);
       case 97:
-         return jjMoveStringLiteralDfa7_0(active0, 0x8040000000000L, active1, 0L, active2, 0L);
+         return jjMoveStringLiteralDfa7_0(active0, 0x10040000000000L, active1, 0L, active2, 0L);
       case 98:
          return jjMoveStringLiteralDfa7_0(active0, 0x4000000L, active1, 0L, active2, 0L);
       case 99:
@@ -1923,12 +1923,12 @@
          }
          break;
       case 108:
-         if ((active0 & 0x20000000000000L) != 0L)
+         if ((active0 & 0x1000000000000L) != 0L)
          {
-            jjmatchedKind = 53;
+            jjmatchedKind = 48;
             jjmatchedPos = 6;
          }
-         return jjMoveStringLiteralDfa7_0(active0, 0x2000000000000L, active1, 0L, active2, 0L);
+         return jjMoveStringLiteralDfa7_0(active0, 0x4000000000000L, active1, 0L, active2, 0L);
       case 109:
          return jjMoveStringLiteralDfa7_0(active0, 0L, active1, 0x100L, active2, 0L);
       case 110:
@@ -1967,9 +1967,9 @@
          }
          return jjMoveStringLiteralDfa7_0(active0, 0L, active1, 0x800020L, active2, 0L);
       case 116:
-         if ((active0 & 0x4000000000000L) != 0L)
+         if ((active0 & 0x8000000000000L) != 0L)
          {
-            jjmatchedKind = 50;
+            jjmatchedKind = 51;
             jjmatchedPos = 6;
          }
          else if ((active2 & 0x40000000L) != 0L)
@@ -2004,9 +2004,9 @@
             jjmatchedKind = 26;
             jjmatchedPos = 7;
          }
-         else if ((active0 & 0x2000000000000L) != 0L)
+         else if ((active0 & 0x4000000000000L) != 0L)
          {
-            jjmatchedKind = 49;
+            jjmatchedKind = 50;
             jjmatchedPos = 7;
          }
          else if ((active1 & 0x80L) != 0L)
@@ -2082,7 +2082,7 @@
             jjmatchedKind = 87;
             jjmatchedPos = 7;
          }
-         return jjMoveStringLiteralDfa8_0(active0, 0x8000000000000L, active1, 0x10000000000000L);
+         return jjMoveStringLiteralDfa8_0(active0, 0x10000000000000L, active1, 0x10000000000000L);
       case 97:
          return jjMoveStringLiteralDfa8_0(active0, 0L, active1, 0x200000020L);
       case 99:
@@ -2093,9 +2093,9 @@
             jjmatchedKind = 26;
             jjmatchedPos = 7;
          }
-         else if ((active0 & 0x2000000000000L) != 0L)
+         else if ((active0 & 0x4000000000000L) != 0L)
          {
-            jjmatchedKind = 49;
+            jjmatchedKind = 50;
             jjmatchedPos = 7;
          }
          else if ((active1 & 0x80L) != 0L)
@@ -2171,7 +2171,7 @@
             jjmatchedKind = 87;
             jjmatchedPos = 7;
          }
-         return jjMoveStringLiteralDfa8_0(active0, 0x8000000000000L, active1, 0x10000000000000L);
+         return jjMoveStringLiteralDfa8_0(active0, 0x10000000000000L, active1, 0x10000000000000L);
       default :
          break;
    }
@@ -2194,9 +2194,9 @@
          }
          break;
       case 69:
-         if ((active0 & 0x8000000000000L) != 0L)
+         if ((active0 & 0x10000000000000L) != 0L)
          {
-            jjmatchedKind = 51;
+            jjmatchedKind = 52;
             jjmatchedPos = 8;
          }
          else if ((active1 & 0x40000000000000L) != 0L)
@@ -2256,9 +2256,9 @@
          }
          break;
       case 101:
-         if ((active0 & 0x8000000000000L) != 0L)
+         if ((active0 & 0x10000000000000L) != 0L)
          {
-            jjmatchedKind = 51;
+            jjmatchedKind = 52;
             jjmatchedPos = 8;
          }
          else if ((active1 & 0x40000000000000L) != 0L)
diff --git a/jena-arq/src/main/java/org/apache/jena/sparql/lang/sparql_12/JavaCharStream.java b/jena-arq/src/main/java/org/apache/jena/sparql/lang/sparql_12/JavaCharStream.java
index d40daeb..e47a4e5 100644
--- a/jena-arq/src/main/java/org/apache/jena/sparql/lang/sparql_12/JavaCharStream.java
+++ b/jena-arq/src/main/java/org/apache/jena/sparql/lang/sparql_12/JavaCharStream.java
@@ -13,7 +13,7 @@
 class JavaCharStream
 {
   /** Whether parser is static. */
-
+  
 @SuppressWarnings("all")
 public static final boolean staticFlag = false;
 
@@ -65,7 +65,7 @@
   }
 
 /* Position in buffer. */
-
+  
 @SuppressWarnings("all")
 public int bufpos = -1;
   int bufsize;
@@ -90,10 +90,10 @@
   protected int tabSize = 1;
   protected boolean trackLineColumn = true;
 
-
+  
 @SuppressWarnings("all")
 public void setTabSize(int i) { tabSize = i; }
-
+  
 @SuppressWarnings("all")
 public int getTabSize() { return tabSize; }
 
@@ -185,7 +185,7 @@
   }
 
 /* @return starting character for token. */
-
+  
 @SuppressWarnings("all")
 public char BeginToken() throws java.io.IOException
   {
@@ -267,7 +267,7 @@
   }
 
 /* Read a character. */
-
+  
 @SuppressWarnings("all")
 public char readChar() throws java.io.IOException
   {
@@ -367,7 +367,7 @@
    * @see #getEndColumn
    */
   @Deprecated
-
+  
 @SuppressWarnings("all")
 public int getColumn() {
     return bufcolumn[bufpos];
@@ -379,7 +379,7 @@
    * @return the line number.
    */
   @Deprecated
-
+  
 @SuppressWarnings("all")
 public int getLine() {
     return bufline[bufpos];
@@ -388,7 +388,7 @@
 /** Get end column.
  * @return the end column or -1
  */
-
+  
 @SuppressWarnings("all")
 public int getEndColumn() {
     return bufcolumn[bufpos];
@@ -397,7 +397,7 @@
 /** Get end line.
  * @return the end line number or -1
  */
-
+  
 @SuppressWarnings("all")
 public int getEndLine() {
     return bufline[bufpos];
@@ -405,21 +405,21 @@
 
 /** Get the beginning column.
  * @return column of token start */
-
+  
 @SuppressWarnings("all")
 public int getBeginColumn() {
     return bufcolumn[tokenBegin];
   }
 
 /** @return line number of token start */
-
+  
 @SuppressWarnings("all")
 public int getBeginLine() {
     return bufline[tokenBegin];
   }
 
 /** Retreat. */
-
+  
 @SuppressWarnings("all")
 public void backup(int amount) {
 
@@ -434,7 +434,7 @@
  * @param startcolumn column number of the first character of the stream.
  * @param buffersize size of the buffer
  */
-
+  
 @SuppressWarnings("all")
 public JavaCharStream(java.io.Reader dstream,
                  int startline, int startcolumn, int buffersize)
@@ -455,7 +455,7 @@
  * @param startline line number of the first character of the stream, mostly for error messages.
  * @param startcolumn column number of the first character of the stream.
  */
-
+  
 @SuppressWarnings("all")
 public JavaCharStream(java.io.Reader dstream,
                                         int startline, int startcolumn)
@@ -463,13 +463,18 @@
     this(dstream, startline, startcolumn, 4096);
   }
 
+/** Constructor.
+ * @param dstream the underlying data source.
+ * @param startline line number of the first character of the stream, mostly for error messages.
+ */
+  
 @SuppressWarnings("all")
 public JavaCharStream(java.io.Reader dstream)
   {
     this(dstream, 1, 1, 4096);
   }
 /* Reinitialise. */
-
+  
 @SuppressWarnings("all")
 public void ReInit(java.io.Reader dstream,
                  int startline, int startcolumn, int buffersize)
@@ -492,7 +497,7 @@
   }
 
 /* Reinitialise. */
-
+  
 @SuppressWarnings("all")
 public void ReInit(java.io.Reader dstream,
                                         int startline, int startcolumn)
@@ -501,14 +506,14 @@
   }
 
 /* Reinitialise. */
-
+  
 @SuppressWarnings("all")
 public void ReInit(java.io.Reader dstream)
   {
     ReInit(dstream, 1, 1, 4096);
   }
 /** Constructor. */
-
+  
 @SuppressWarnings("all")
 public JavaCharStream(java.io.InputStream dstream, String encoding, int startline,
   int startcolumn, int buffersize) throws java.io.UnsupportedEncodingException
@@ -522,7 +527,7 @@
  * @param startcolumn column number of the first character of the stream.
  * @param buffersize size of the buffer
  */
-
+  
 @SuppressWarnings("all")
 public JavaCharStream(java.io.InputStream dstream, int startline,
   int startcolumn, int buffersize)
@@ -537,7 +542,7 @@
  * @param startcolumn column number of the first character of the stream.
  * @throws UnsupportedEncodingException encoding is invalid or unsupported.
  */
-
+  
 @SuppressWarnings("all")
 public JavaCharStream(java.io.InputStream dstream, String encoding, int startline,
                         int startcolumn) throws java.io.UnsupportedEncodingException
@@ -550,7 +555,7 @@
  * @param startline line number of the first character of the stream, mostly for error messages.
  * @param startcolumn column number of the first character of the stream.
  */
-
+  
 @SuppressWarnings("all")
 public JavaCharStream(java.io.InputStream dstream, int startline,
                         int startcolumn)
@@ -563,7 +568,7 @@
  * @param encoding the character encoding of the data stream.
  * @throws UnsupportedEncodingException encoding is invalid or unsupported.
  */
-
+  
 @SuppressWarnings("all")
 public JavaCharStream(java.io.InputStream dstream, String encoding) throws java.io.UnsupportedEncodingException
   {
@@ -573,7 +578,7 @@
   /** Constructor.
    * @param dstream the underlying data source.
    */
-
+  
 @SuppressWarnings("all")
 public JavaCharStream(java.io.InputStream dstream)
   {
@@ -587,7 +592,7 @@
  * @param startcolumn column number of the first character of the stream.
  * @param buffersize size of the buffer
  */
-
+  
 @SuppressWarnings("all")
 public void ReInit(java.io.InputStream dstream, String encoding, int startline,
   int startcolumn, int buffersize) throws java.io.UnsupportedEncodingException
@@ -601,7 +606,7 @@
  * @param startcolumn column number of the first character of the stream.
  * @param buffersize size of the buffer
  */
-
+  
 @SuppressWarnings("all")
 public void ReInit(java.io.InputStream dstream, int startline,
   int startcolumn, int buffersize)
@@ -615,7 +620,7 @@
  * @param startcolumn column number of the first character of the stream.
  * @throws UnsupportedEncodingException encoding is invalid or unsupported.
  */
-
+  
 @SuppressWarnings("all")
 public void ReInit(java.io.InputStream dstream, String encoding, int startline,
                      int startcolumn) throws java.io.UnsupportedEncodingException
@@ -627,7 +632,7 @@
  * @param startline line number of the first character of the stream, mostly for error messages.
  * @param startcolumn column number of the first character of the stream.
  */
-
+  
 @SuppressWarnings("all")
 public void ReInit(java.io.InputStream dstream, int startline,
                      int startcolumn)
@@ -639,7 +644,7 @@
  * @param encoding the character encoding of the data stream.
  * @throws UnsupportedEncodingException encoding is invalid or unsupported.
  */
-
+  
 @SuppressWarnings("all")
 public void ReInit(java.io.InputStream dstream, String encoding) throws java.io.UnsupportedEncodingException
   {
@@ -649,7 +654,7 @@
 /** Reinitialise.
  * @param dstream the underlying data source.
  */
-
+  
 @SuppressWarnings("all")
 public void ReInit(java.io.InputStream dstream)
   {
@@ -658,7 +663,7 @@
 
   /** Get the token timage.
    * @return token image as String */
-
+  
 @SuppressWarnings("all")
 public String GetImage()
   {
@@ -672,7 +677,7 @@
   /** Get the suffix as an array of characters.
    * @param len the length of the array to return.
    * @return suffix */
-
+  
 @SuppressWarnings("all")
 public char[] GetSuffix(int len)
   {
@@ -691,7 +696,7 @@
   }
 
   /** Set buffers back to null when finished. */
-
+  
 @SuppressWarnings("all")
 public void Done()
   {
@@ -707,7 +712,7 @@
    * @param newLine the new line number.
    * @param newCol the new column number.
    */
-
+  
 @SuppressWarnings("all")
 public void adjustBeginLineColumn(int newLine, int newCol)
   {
diff --git a/jena-arq/src/main/java/org/apache/jena/sparql/lang/sparql_12/SPARQLParser12.java b/jena-arq/src/main/java/org/apache/jena/sparql/lang/sparql_12/SPARQLParser12.java
index 1f7780e..8a40e62 100644
--- a/jena-arq/src/main/java/org/apache/jena/sparql/lang/sparql_12/SPARQLParser12.java
+++ b/jena-arq/src/main/java/org/apache/jena/sparql/lang/sparql_12/SPARQLParser12.java
@@ -16,7 +16,6 @@
 public class SPARQLParser12 extends SPARQLParser12Base implements SPARQLParser12Constants {
 
   final public void QueryUnit() throws ParseException {
-    ByteOrderMark();
 startQuery() ;
     Query();
     jj_consume_token(0);
@@ -51,25 +50,12 @@
 }
 
   final public void UpdateUnit() throws ParseException {
-    ByteOrderMark();
 startUpdateRequest() ;
     Update();
     jj_consume_token(0);
 finishUpdateRequest() ;
 }
 
-  final public void ByteOrderMark() throws ParseException {
-    switch ((jj_ntk==-1)?jj_ntk_f():jj_ntk) {
-    case BOM:{
-      jj_consume_token(BOM);
-      break;
-      }
-    default:
-      jj_la1[1] = jj_gen;
-      ;
-    }
-}
-
   final public void Prologue() throws ParseException {
     label_1:
     while (true) {
@@ -80,7 +66,7 @@
         break;
         }
       default:
-        jj_la1[2] = jj_gen;
+        jj_la1[1] = jj_gen;
         break label_1;
       }
       switch ((jj_ntk==-1)?jj_ntk_f():jj_ntk) {
@@ -93,7 +79,7 @@
         break;
         }
       default:
-        jj_la1[3] = jj_gen;
+        jj_la1[2] = jj_gen;
         jj_consume_token(-1);
         throw new ParseException();
       }
@@ -124,7 +110,7 @@
         break;
         }
       default:
-        jj_la1[4] = jj_gen;
+        jj_la1[3] = jj_gen;
         break label_2;
       }
       DatasetClause();
@@ -158,14 +144,14 @@
         break;
         }
       default:
-        jj_la1[5] = jj_gen;
+        jj_la1[4] = jj_gen;
         jj_consume_token(-1);
         throw new ParseException();
       }
       break;
       }
     default:
-      jj_la1[6] = jj_gen;
+      jj_la1[5] = jj_gen;
       ;
     }
 setAllowAggregatesInExpressions(true) ;
@@ -194,7 +180,7 @@
           break;
           }
         default:
-          jj_la1[7] = jj_gen;
+          jj_la1[6] = jj_gen;
           jj_consume_token(-1);
           throw new ParseException();
         }
@@ -206,7 +192,7 @@
           break;
           }
         default:
-          jj_la1[8] = jj_gen;
+          jj_la1[7] = jj_gen;
           break label_3;
         }
       }
@@ -218,7 +204,7 @@
       break;
       }
     default:
-      jj_la1[9] = jj_gen;
+      jj_la1[8] = jj_gen;
       jj_consume_token(-1);
       throw new ParseException();
     }
@@ -241,7 +227,7 @@
           break;
           }
         default:
-          jj_la1[10] = jj_gen;
+          jj_la1[9] = jj_gen;
           break label_4;
         }
         DatasetClause();
@@ -260,7 +246,7 @@
           break;
           }
         default:
-          jj_la1[11] = jj_gen;
+          jj_la1[10] = jj_gen;
           break label_5;
         }
         DatasetClause();
@@ -292,12 +278,13 @@
       case LPAREN:
       case NIL:
       case LBRACKET:
-      case ANON:{
+      case ANON:
+      case LT2:{
         TriplesTemplate(acc);
         break;
         }
       default:
-        jj_la1[12] = jj_gen;
+        jj_la1[11] = jj_gen;
         ;
       }
       jj_consume_token(RBRACE);
@@ -311,7 +298,7 @@
       break;
       }
     default:
-      jj_la1[13] = jj_gen;
+      jj_la1[12] = jj_gen;
       jj_consume_token(-1);
       throw new ParseException();
     }
@@ -340,7 +327,7 @@
           break;
           }
         default:
-          jj_la1[14] = jj_gen;
+          jj_la1[13] = jj_gen;
           break label_6;
         }
       }
@@ -353,7 +340,7 @@
       break;
       }
     default:
-      jj_la1[15] = jj_gen;
+      jj_la1[14] = jj_gen;
       jj_consume_token(-1);
       throw new ParseException();
     }
@@ -365,7 +352,7 @@
         break;
         }
       default:
-        jj_la1[16] = jj_gen;
+        jj_la1[15] = jj_gen;
         break label_7;
       }
       DatasetClause();
@@ -377,7 +364,7 @@
       break;
       }
     default:
-      jj_la1[17] = jj_gen;
+      jj_la1[16] = jj_gen;
       ;
     }
     SolutionModifier();
@@ -394,7 +381,7 @@
         break;
         }
       default:
-        jj_la1[18] = jj_gen;
+        jj_la1[17] = jj_gen;
         break label_8;
       }
       DatasetClause();
@@ -417,7 +404,7 @@
       break;
       }
     default:
-      jj_la1[19] = jj_gen;
+      jj_la1[18] = jj_gen;
       jj_consume_token(-1);
       throw new ParseException();
     }
@@ -447,7 +434,7 @@
       break;
       }
     default:
-      jj_la1[20] = jj_gen;
+      jj_la1[19] = jj_gen;
       ;
     }
 startWherePattern() ;
@@ -463,7 +450,7 @@
       break;
       }
     default:
-      jj_la1[21] = jj_gen;
+      jj_la1[20] = jj_gen;
       ;
     }
     switch ((jj_ntk==-1)?jj_ntk_f():jj_ntk) {
@@ -472,7 +459,7 @@
       break;
       }
     default:
-      jj_la1[22] = jj_gen;
+      jj_la1[21] = jj_gen;
       ;
     }
     switch ((jj_ntk==-1)?jj_ntk_f():jj_ntk) {
@@ -481,7 +468,7 @@
       break;
       }
     default:
-      jj_la1[23] = jj_gen;
+      jj_la1[22] = jj_gen;
       ;
     }
     switch ((jj_ntk==-1)?jj_ntk_f():jj_ntk) {
@@ -491,7 +478,7 @@
       break;
       }
     default:
-      jj_la1[24] = jj_gen;
+      jj_la1[23] = jj_gen;
       ;
     }
 }
@@ -508,6 +495,11 @@
       case PNAME_LN:
       case VAR1:
       case VAR2:
+      case TRIPLE:
+      case IS_TRIPLE:
+      case SUBJECT:
+      case PREDICATE:
+      case OBJECT:
       case EXISTS:
       case NOT:
       case COUNT:
@@ -574,7 +566,7 @@
         break;
         }
       default:
-        jj_la1[25] = jj_gen;
+        jj_la1[24] = jj_gen;
         break label_9;
       }
     }
@@ -582,6 +574,11 @@
 
   final public void GroupCondition() throws ParseException {Var v = null ; Expr expr = null ;
     switch ((jj_ntk==-1)?jj_ntk_f():jj_ntk) {
+    case TRIPLE:
+    case IS_TRIPLE:
+    case SUBJECT:
+    case PREDICATE:
+    case OBJECT:
     case EXISTS:
     case NOT:
     case COUNT:
@@ -664,7 +661,7 @@
         break;
         }
       default:
-        jj_la1[26] = jj_gen;
+        jj_la1[25] = jj_gen;
         ;
       }
       jj_consume_token(RPAREN);
@@ -678,7 +675,7 @@
       break;
       }
     default:
-      jj_la1[27] = jj_gen;
+      jj_la1[26] = jj_gen;
       jj_consume_token(-1);
       throw new ParseException();
     }
@@ -694,6 +691,109 @@
       case IRIref:
       case PNAME_NS:
       case PNAME_LN:
+      case TRIPLE:
+      case IS_TRIPLE:
+      case SUBJECT:
+      case PREDICATE:
+      case OBJECT:
+      case EXISTS:
+      case NOT:
+      case COUNT:
+      case MIN:
+      case MAX:
+      case SUM:
+      case AVG:
+      case SAMPLE:
+      case GROUP_CONCAT:
+      case BOUND:
+      case COALESCE:
+      case IF:
+      case BNODE:
+      case IRI:
+      case URI:
+      case STR:
+      case STRLANG:
+      case STRDT:
+      case DTYPE:
+      case LANG:
+      case LANGMATCHES:
+      case IS_URI:
+      case IS_IRI:
+      case IS_BLANK:
+      case IS_LITERAL:
+      case IS_NUMERIC:
+      case REGEX:
+      case SAME_TERM:
+      case RAND:
+      case ABS:
+      case CEIL:
+      case FLOOR:
+      case ROUND:
+      case CONCAT:
+      case SUBSTR:
+      case STRLEN:
+      case REPLACE:
+      case UCASE:
+      case LCASE:
+      case ENCODE_FOR_URI:
+      case CONTAINS:
+      case STRSTARTS:
+      case STRENDS:
+      case STRBEFORE:
+      case STRAFTER:
+      case YEAR:
+      case MONTH:
+      case DAY:
+      case HOURS:
+      case MINUTES:
+      case SECONDS:
+      case TIMEZONE:
+      case TZ:
+      case NOW:
+      case UUID:
+      case STRUUID:
+      case MD5:
+      case SHA1:
+      case SHA256:
+      case SHA384:
+      case SHA512:
+      case LPAREN:{
+        ;
+        break;
+        }
+      default:
+        jj_la1[27] = jj_gen;
+        break label_10;
+      }
+    }
+setAllowAggregatesInExpressions(false) ;
+}
+
+  final public void HavingCondition() throws ParseException {Expr c ;
+    c = Constraint();
+getQuery().addHavingCondition(c) ;
+}
+
+  final public void OrderClause() throws ParseException {
+setAllowAggregatesInExpressions(true) ;
+    jj_consume_token(ORDER);
+    jj_consume_token(BY);
+    label_11:
+    while (true) {
+      OrderCondition();
+      switch ((jj_ntk==-1)?jj_ntk_f():jj_ntk) {
+      case IRIref:
+      case PNAME_NS:
+      case PNAME_LN:
+      case VAR1:
+      case VAR2:
+      case ASC:
+      case DESC:
+      case TRIPLE:
+      case IS_TRIPLE:
+      case SUBJECT:
+      case PREDICATE:
+      case OBJECT:
       case EXISTS:
       case NOT:
       case COUNT:
@@ -761,99 +861,6 @@
         }
       default:
         jj_la1[28] = jj_gen;
-        break label_10;
-      }
-    }
-setAllowAggregatesInExpressions(false) ;
-}
-
-  final public void HavingCondition() throws ParseException {Expr c ;
-    c = Constraint();
-getQuery().addHavingCondition(c) ;
-}
-
-  final public void OrderClause() throws ParseException {
-setAllowAggregatesInExpressions(true) ;
-    jj_consume_token(ORDER);
-    jj_consume_token(BY);
-    label_11:
-    while (true) {
-      OrderCondition();
-      switch ((jj_ntk==-1)?jj_ntk_f():jj_ntk) {
-      case IRIref:
-      case PNAME_NS:
-      case PNAME_LN:
-      case VAR1:
-      case VAR2:
-      case ASC:
-      case DESC:
-      case EXISTS:
-      case NOT:
-      case COUNT:
-      case MIN:
-      case MAX:
-      case SUM:
-      case AVG:
-      case SAMPLE:
-      case GROUP_CONCAT:
-      case BOUND:
-      case COALESCE:
-      case IF:
-      case BNODE:
-      case IRI:
-      case URI:
-      case STR:
-      case STRLANG:
-      case STRDT:
-      case DTYPE:
-      case LANG:
-      case LANGMATCHES:
-      case IS_URI:
-      case IS_IRI:
-      case IS_BLANK:
-      case IS_LITERAL:
-      case IS_NUMERIC:
-      case REGEX:
-      case SAME_TERM:
-      case RAND:
-      case ABS:
-      case CEIL:
-      case FLOOR:
-      case ROUND:
-      case CONCAT:
-      case SUBSTR:
-      case STRLEN:
-      case REPLACE:
-      case UCASE:
-      case LCASE:
-      case ENCODE_FOR_URI:
-      case CONTAINS:
-      case STRSTARTS:
-      case STRENDS:
-      case STRBEFORE:
-      case STRAFTER:
-      case YEAR:
-      case MONTH:
-      case DAY:
-      case HOURS:
-      case MINUTES:
-      case SECONDS:
-      case TIMEZONE:
-      case TZ:
-      case NOW:
-      case UUID:
-      case STRUUID:
-      case MD5:
-      case SHA1:
-      case SHA256:
-      case SHA384:
-      case SHA512:
-      case LPAREN:{
-        ;
-        break;
-        }
-      default:
-        jj_la1[29] = jj_gen;
         break label_11;
       }
     }
@@ -877,7 +884,7 @@
         break;
         }
       default:
-        jj_la1[30] = jj_gen;
+        jj_la1[29] = jj_gen;
         jj_consume_token(-1);
         throw new ParseException();
       }
@@ -889,6 +896,11 @@
     case PNAME_LN:
     case VAR1:
     case VAR2:
+    case TRIPLE:
+    case IS_TRIPLE:
+    case SUBJECT:
+    case PREDICATE:
+    case OBJECT:
     case EXISTS:
     case NOT:
     case COUNT:
@@ -955,6 +967,11 @@
       case IRIref:
       case PNAME_NS:
       case PNAME_LN:
+      case TRIPLE:
+      case IS_TRIPLE:
+      case SUBJECT:
+      case PREDICATE:
+      case OBJECT:
       case EXISTS:
       case NOT:
       case COUNT:
@@ -1026,14 +1043,14 @@
         break;
         }
       default:
-        jj_la1[31] = jj_gen;
+        jj_la1[30] = jj_gen;
         jj_consume_token(-1);
         throw new ParseException();
       }
       break;
       }
     default:
-      jj_la1[32] = jj_gen;
+      jj_la1[31] = jj_gen;
       jj_consume_token(-1);
       throw new ParseException();
     }
@@ -1053,7 +1070,7 @@
         break;
         }
       default:
-        jj_la1[33] = jj_gen;
+        jj_la1[32] = jj_gen;
         ;
       }
       break;
@@ -1066,13 +1083,13 @@
         break;
         }
       default:
-        jj_la1[34] = jj_gen;
+        jj_la1[33] = jj_gen;
         ;
       }
       break;
       }
     default:
-      jj_la1[35] = jj_gen;
+      jj_la1[34] = jj_gen;
       jj_consume_token(-1);
       throw new ParseException();
     }
@@ -1100,7 +1117,7 @@
       break;
       }
     default:
-      jj_la1[36] = jj_gen;
+      jj_la1[35] = jj_gen;
       ;
     }
 }
@@ -1129,13 +1146,13 @@
         break;
         }
       default:
-        jj_la1[37] = jj_gen;
+        jj_la1[36] = jj_gen;
         ;
       }
       break;
       }
     default:
-      jj_la1[38] = jj_gen;
+      jj_la1[37] = jj_gen;
       ;
     }
 }
@@ -1190,7 +1207,7 @@
       break;
       }
     default:
-      jj_la1[39] = jj_gen;
+      jj_la1[38] = jj_gen;
       jj_consume_token(-1);
       throw new ParseException();
     }
@@ -1207,7 +1224,7 @@
       break;
       }
     default:
-      jj_la1[40] = jj_gen;
+      jj_la1[39] = jj_gen;
       ;
     }
     url = iri();
@@ -1218,7 +1235,7 @@
       break;
       }
     default:
-      jj_la1[41] = jj_gen;
+      jj_la1[40] = jj_gen;
       ;
     }
 {if ("" != null) return new UpdateLoad(url, dest, silent) ;}
@@ -1234,7 +1251,7 @@
       break;
       }
     default:
-      jj_la1[42] = jj_gen;
+      jj_la1[41] = jj_gen;
       ;
     }
     target = GraphRefAll();
@@ -1251,7 +1268,7 @@
       break;
       }
     default:
-      jj_la1[43] = jj_gen;
+      jj_la1[42] = jj_gen;
       ;
     }
     target = GraphRefAll();
@@ -1268,7 +1285,7 @@
       break;
       }
     default:
-      jj_la1[44] = jj_gen;
+      jj_la1[43] = jj_gen;
       ;
     }
     iri = GraphRef();
@@ -1285,7 +1302,7 @@
       break;
       }
     default:
-      jj_la1[45] = jj_gen;
+      jj_la1[44] = jj_gen;
       ;
     }
     src = GraphOrDefault();
@@ -1304,7 +1321,7 @@
       break;
       }
     default:
-      jj_la1[46] = jj_gen;
+      jj_la1[45] = jj_gen;
       ;
     }
     src = GraphOrDefault();
@@ -1323,7 +1340,7 @@
       break;
       }
     default:
-      jj_la1[47] = jj_gen;
+      jj_la1[46] = jj_gen;
       ;
     }
     src = GraphOrDefault();
@@ -1372,7 +1389,7 @@
       break;
       }
     default:
-      jj_la1[48] = jj_gen;
+      jj_la1[47] = jj_gen;
       ;
     }
     switch ((jj_ntk==-1)?jj_ntk_f():jj_ntk) {
@@ -1384,7 +1401,7 @@
         break;
         }
       default:
-        jj_la1[49] = jj_gen;
+        jj_la1[48] = jj_gen;
         ;
       }
       break;
@@ -1394,7 +1411,7 @@
       break;
       }
     default:
-      jj_la1[50] = jj_gen;
+      jj_la1[49] = jj_gen;
       jj_consume_token(-1);
       throw new ParseException();
     }
@@ -1406,7 +1423,7 @@
         break;
         }
       default:
-        jj_la1[51] = jj_gen;
+        jj_la1[50] = jj_gen;
         break label_12;
       }
       UsingClause(up);
@@ -1456,7 +1473,7 @@
       break;
       }
     default:
-      jj_la1[52] = jj_gen;
+      jj_la1[51] = jj_gen;
       jj_consume_token(-1);
       throw new ParseException();
     }
@@ -1479,7 +1496,7 @@
         break;
         }
       default:
-        jj_la1[53] = jj_gen;
+        jj_la1[52] = jj_gen;
         ;
       }
       iri = iri();
@@ -1487,7 +1504,7 @@
       break;
       }
     default:
-      jj_la1[54] = jj_gen;
+      jj_la1[53] = jj_gen;
       jj_consume_token(-1);
       throw new ParseException();
     }
@@ -1524,7 +1541,7 @@
       break;
       }
     default:
-      jj_la1[55] = jj_gen;
+      jj_la1[54] = jj_gen;
       jj_consume_token(-1);
       throw new ParseException();
     }
@@ -1569,12 +1586,13 @@
     case LPAREN:
     case NIL:
     case LBRACKET:
-    case ANON:{
+    case ANON:
+    case LT2:{
       TriplesTemplate(acc);
       break;
       }
     default:
-      jj_la1[56] = jj_gen;
+      jj_la1[55] = jj_gen;
       ;
     }
     label_13:
@@ -1585,7 +1603,7 @@
         break;
         }
       default:
-        jj_la1[57] = jj_gen;
+        jj_la1[56] = jj_gen;
         break label_13;
       }
       QuadsNotTriples(acc);
@@ -1595,7 +1613,7 @@
         break;
         }
       default:
-        jj_la1[58] = jj_gen;
+        jj_la1[57] = jj_gen;
         ;
       }
       switch ((jj_ntk==-1)?jj_ntk_f():jj_ntk) {
@@ -1623,12 +1641,13 @@
       case LPAREN:
       case NIL:
       case LBRACKET:
-      case ANON:{
+      case ANON:
+      case LT2:{
         TriplesTemplate(acc);
         break;
         }
       default:
-        jj_la1[59] = jj_gen;
+        jj_la1[58] = jj_gen;
         ;
       }
     }
@@ -1664,12 +1683,13 @@
     case LPAREN:
     case NIL:
     case LBRACKET:
-    case ANON:{
+    case ANON:
+    case LT2:{
       TriplesTemplate(acc);
       break;
       }
     default:
-      jj_la1[60] = jj_gen;
+      jj_la1[59] = jj_gen;
       ;
     }
     jj_consume_token(RBRACE);
@@ -1706,18 +1726,19 @@
       case LPAREN:
       case NIL:
       case LBRACKET:
-      case ANON:{
+      case ANON:
+      case LT2:{
         TriplesTemplate(acc);
         break;
         }
       default:
-        jj_la1[61] = jj_gen;
+        jj_la1[60] = jj_gen;
         ;
       }
       break;
       }
     default:
-      jj_la1[62] = jj_gen;
+      jj_la1[61] = jj_gen;
       ;
     }
 }
@@ -1734,7 +1755,7 @@
       break;
       }
     default:
-      jj_la1[63] = jj_gen;
+      jj_la1[62] = jj_gen;
       el = GroupGraphPatternSub();
     }
     jj_consume_token(RBRACE);
@@ -1770,7 +1791,8 @@
     case LPAREN:
     case NIL:
     case LBRACKET:
-    case ANON:{
+    case ANON:
+    case LT2:{
 startTriplesBlock() ;
       el = TriplesBlock(null);
 endTriplesBlock() ;
@@ -1778,7 +1800,7 @@
       break;
       }
     default:
-      jj_la1[64] = jj_gen;
+      jj_la1[63] = jj_gen;
       ;
     }
     label_14:
@@ -1796,7 +1818,7 @@
         break;
         }
       default:
-        jj_la1[65] = jj_gen;
+        jj_la1[64] = jj_gen;
         break label_14;
       }
       el = GraphPatternNotTriples();
@@ -1807,7 +1829,7 @@
         break;
         }
       default:
-        jj_la1[66] = jj_gen;
+        jj_la1[65] = jj_gen;
         ;
       }
       switch ((jj_ntk==-1)?jj_ntk_f():jj_ntk) {
@@ -1835,7 +1857,8 @@
       case LPAREN:
       case NIL:
       case LBRACKET:
-      case ANON:{
+      case ANON:
+      case LT2:{
 startTriplesBlock() ;
         el = TriplesBlock(null);
 endTriplesBlock() ;
@@ -1843,7 +1866,7 @@
         break;
         }
       default:
-        jj_la1[67] = jj_gen;
+        jj_la1[66] = jj_gen;
         ;
       }
     }
@@ -1884,18 +1907,19 @@
       case LPAREN:
       case NIL:
       case LBRACKET:
-      case ANON:{
+      case ANON:
+      case LT2:{
         TriplesBlock(acc);
         break;
         }
       default:
-        jj_la1[68] = jj_gen;
+        jj_la1[67] = jj_gen;
         ;
       }
       break;
       }
     default:
-      jj_la1[69] = jj_gen;
+      jj_la1[68] = jj_gen;
       ;
     }
 {if ("" != null) return acc ;}
@@ -1937,7 +1961,7 @@
       break;
       }
     default:
-      jj_la1[70] = jj_gen;
+      jj_la1[69] = jj_gen;
       jj_consume_token(-1);
       throw new ParseException();
     }
@@ -1969,7 +1993,7 @@
       break;
       }
     default:
-      jj_la1[71] = jj_gen;
+      jj_la1[70] = jj_gen;
       ;
     }
     n = VarOrIri();
@@ -2013,7 +2037,7 @@
       break;
       }
     default:
-      jj_la1[72] = jj_gen;
+      jj_la1[71] = jj_gen;
       jj_consume_token(-1);
       throw new ParseException();
     }
@@ -2045,12 +2069,13 @@
       case STRING_LITERAL1:
       case STRING_LITERAL2:
       case STRING_LITERAL_LONG1:
-      case STRING_LITERAL_LONG2:{
+      case STRING_LITERAL_LONG2:
+      case LT2:{
         ;
         break;
         }
       default:
-        jj_la1[73] = jj_gen;
+        jj_la1[72] = jj_gen;
         break label_15;
       }
       n = DataBlockValue();
@@ -2078,7 +2103,7 @@
           break;
           }
         default:
-          jj_la1[74] = jj_gen;
+          jj_la1[73] = jj_gen;
           break label_16;
         }
         v = Var();
@@ -2088,7 +2113,7 @@
       break;
       }
     default:
-      jj_la1[75] = jj_gen;
+      jj_la1[74] = jj_gen;
       jj_consume_token(-1);
       throw new ParseException();
     }
@@ -2102,7 +2127,7 @@
         break;
         }
       default:
-        jj_la1[76] = jj_gen;
+        jj_la1[75] = jj_gen;
         break label_17;
       }
       switch ((jj_ntk==-1)?jj_ntk_f():jj_ntk) {
@@ -2131,12 +2156,13 @@
           case STRING_LITERAL1:
           case STRING_LITERAL2:
           case STRING_LITERAL_LONG1:
-          case STRING_LITERAL_LONG2:{
+          case STRING_LITERAL_LONG2:
+          case LT2:{
             ;
             break;
             }
           default:
-            jj_la1[77] = jj_gen;
+            jj_la1[76] = jj_gen;
             break label_18;
           }
           n = DataBlockValue();
@@ -2155,7 +2181,7 @@
         break;
         }
       default:
-        jj_la1[78] = jj_gen;
+        jj_la1[77] = jj_gen;
         jj_consume_token(-1);
         throw new ParseException();
       }
@@ -2204,8 +2230,13 @@
 {if ("" != null) return null ;}
       break;
       }
+    case LT2:{
+      n = QuotedTripleData();
+{if ("" != null) return n ;}
+      break;
+      }
     default:
-      jj_la1[79] = jj_gen;
+      jj_la1[78] = jj_gen;
       jj_consume_token(-1);
       throw new ParseException();
     }
@@ -2229,7 +2260,7 @@
         break;
         }
       default:
-        jj_la1[80] = jj_gen;
+        jj_la1[79] = jj_gen;
         break label_19;
       }
       jj_consume_token(UNION);
@@ -2258,6 +2289,11 @@
       c = BrackettedExpression();
       break;
       }
+    case TRIPLE:
+    case IS_TRIPLE:
+    case SUBJECT:
+    case PREDICATE:
+    case OBJECT:
     case EXISTS:
     case NOT:
     case COUNT:
@@ -2329,7 +2365,7 @@
       break;
       }
     default:
-      jj_la1[81] = jj_gen;
+      jj_la1[80] = jj_gen;
       jj_consume_token(-1);
       throw new ParseException();
     }
@@ -2370,7 +2406,7 @@
         break;
         }
       default:
-        jj_la1[82] = jj_gen;
+        jj_la1[81] = jj_gen;
         ;
       }
       expr = Expression();
@@ -2383,7 +2419,7 @@
           break;
           }
         default:
-          jj_la1[83] = jj_gen;
+          jj_la1[82] = jj_gen;
           break label_20;
         }
         jj_consume_token(COMMA);
@@ -2394,7 +2430,7 @@
       break;
       }
     default:
-      jj_la1[84] = jj_gen;
+      jj_la1[83] = jj_gen;
       jj_consume_token(-1);
       throw new ParseException();
     }
@@ -2420,7 +2456,7 @@
           break;
           }
         default:
-          jj_la1[85] = jj_gen;
+          jj_la1[84] = jj_gen;
           break label_21;
         }
         jj_consume_token(COMMA);
@@ -2431,7 +2467,7 @@
       break;
       }
     default:
-      jj_la1[86] = jj_gen;
+      jj_la1[85] = jj_gen;
       jj_consume_token(-1);
       throw new ParseException();
     }
@@ -2468,12 +2504,13 @@
     case LPAREN:
     case NIL:
     case LBRACKET:
-    case ANON:{
+    case ANON:
+    case LT2:{
       ConstructTriples(acc);
       break;
       }
     default:
-      jj_la1[87] = jj_gen;
+      jj_la1[86] = jj_gen;
       ;
     }
     jj_consume_token(RBRACE);
@@ -2512,18 +2549,19 @@
       case LPAREN:
       case NIL:
       case LBRACKET:
-      case ANON:{
+      case ANON:
+      case LT2:{
         ConstructTriples(acc);
         break;
         }
       default:
-        jj_la1[88] = jj_gen;
+        jj_la1[87] = jj_gen;
         ;
       }
       break;
       }
     default:
-      jj_la1[89] = jj_gen;
+      jj_la1[88] = jj_gen;
       ;
     }
 }
@@ -2552,7 +2590,8 @@
     case STRING_LITERAL_LONG1:
     case STRING_LITERAL_LONG2:
     case NIL:
-    case ANON:{
+    case ANON:
+    case LT2:{
       s = VarOrTerm();
       PropertyListNotEmpty(s, acc);
       break;
@@ -2566,7 +2605,7 @@
       break;
       }
     default:
-      jj_la1[90] = jj_gen;
+      jj_la1[89] = jj_gen;
       jj_consume_token(-1);
       throw new ParseException();
     }
@@ -2584,7 +2623,7 @@
       break;
       }
     default:
-      jj_la1[91] = jj_gen;
+      jj_la1[90] = jj_gen;
       ;
     }
 }
@@ -2600,7 +2639,7 @@
         break;
         }
       default:
-        jj_la1[92] = jj_gen;
+        jj_la1[91] = jj_gen;
         break label_22;
       }
       jj_consume_token(SEMICOLON);
@@ -2616,7 +2655,7 @@
         break;
         }
       default:
-        jj_la1[93] = jj_gen;
+        jj_la1[92] = jj_gen;
         ;
       }
     }
@@ -2638,7 +2677,7 @@
       break;
       }
     default:
-      jj_la1[94] = jj_gen;
+      jj_la1[93] = jj_gen;
       jj_consume_token(-1);
       throw new ParseException();
     }
@@ -2656,7 +2695,7 @@
         break;
         }
       default:
-        jj_la1[95] = jj_gen;
+        jj_la1[94] = jj_gen;
         break label_23;
       }
       jj_consume_token(COMMA);
@@ -2668,6 +2707,7 @@
 ElementPathBlock tempAcc = new ElementPathBlock() ; int mark = tempAcc.mark() ;
     o = GraphNode(tempAcc);
 insert(tempAcc, mark, s, p, path, o) ; insert(acc, tempAcc) ;
+    Annotation(acc, s, p, path, o);
 }
 
   final public void TriplesSameSubjectPath(TripleCollector acc) throws ParseException {Node s ;
@@ -2694,7 +2734,8 @@
     case STRING_LITERAL_LONG1:
     case STRING_LITERAL_LONG2:
     case NIL:
-    case ANON:{
+    case ANON:
+    case LT2:{
       s = VarOrTerm();
       PropertyListPathNotEmpty(s, acc);
       break;
@@ -2708,7 +2749,7 @@
       break;
       }
     default:
-      jj_la1[96] = jj_gen;
+      jj_la1[95] = jj_gen;
       jj_consume_token(-1);
       throw new ParseException();
     }
@@ -2729,7 +2770,7 @@
       break;
       }
     default:
-      jj_la1[97] = jj_gen;
+      jj_la1[96] = jj_gen;
       ;
     }
 }
@@ -2752,7 +2793,7 @@
       break;
       }
     default:
-      jj_la1[98] = jj_gen;
+      jj_la1[97] = jj_gen;
       jj_consume_token(-1);
       throw new ParseException();
     }
@@ -2765,7 +2806,7 @@
         break;
         }
       default:
-        jj_la1[99] = jj_gen;
+        jj_la1[98] = jj_gen;
         break label_24;
       }
       jj_consume_token(SEMICOLON);
@@ -2797,7 +2838,7 @@
           break;
           }
         default:
-          jj_la1[100] = jj_gen;
+          jj_la1[99] = jj_gen;
           jj_consume_token(-1);
           throw new ParseException();
         }
@@ -2805,7 +2846,7 @@
         break;
         }
       default:
-        jj_la1[101] = jj_gen;
+        jj_la1[100] = jj_gen;
         ;
       }
     }
@@ -2833,7 +2874,7 @@
         break;
         }
       default:
-        jj_la1[102] = jj_gen;
+        jj_la1[101] = jj_gen;
         break label_25;
       }
       jj_consume_token(COMMA);
@@ -2845,6 +2886,7 @@
 ElementPathBlock tempAcc = new ElementPathBlock() ; int mark = tempAcc.mark() ;
     o = GraphNodePath(tempAcc);
 insert(tempAcc, mark, s, p, path, o) ; insert(acc, tempAcc) ;
+    AnnotationPath(acc, s, p, path, o);
 }
 
   final public Path Path() throws ParseException {Path p ;
@@ -2863,7 +2905,7 @@
         break;
         }
       default:
-        jj_la1[103] = jj_gen;
+        jj_la1[102] = jj_gen;
         break label_26;
       }
       jj_consume_token(VBAR);
@@ -2884,7 +2926,7 @@
         break;
         }
       default:
-        jj_la1[104] = jj_gen;
+        jj_la1[103] = jj_gen;
         break label_27;
       }
       jj_consume_token(SLASH);
@@ -2905,7 +2947,7 @@
       break;
       }
     default:
-      jj_la1[105] = jj_gen;
+      jj_la1[104] = jj_gen;
       ;
     }
 {if ("" != null) return p ;}
@@ -2930,7 +2972,7 @@
       break;
       }
     default:
-      jj_la1[106] = jj_gen;
+      jj_la1[105] = jj_gen;
       jj_consume_token(-1);
       throw new ParseException();
     }
@@ -2956,7 +2998,7 @@
       break;
       }
     default:
-      jj_la1[107] = jj_gen;
+      jj_la1[106] = jj_gen;
       jj_consume_token(-1);
       throw new ParseException();
     }
@@ -2989,7 +3031,7 @@
       break;
       }
     default:
-      jj_la1[108] = jj_gen;
+      jj_la1[107] = jj_gen;
       jj_consume_token(-1);
       throw new ParseException();
     }
@@ -3027,7 +3069,7 @@
             break;
             }
           default:
-            jj_la1[109] = jj_gen;
+            jj_la1[108] = jj_gen;
             break label_28;
           }
           jj_consume_token(VBAR);
@@ -3037,14 +3079,14 @@
         break;
         }
       default:
-        jj_la1[110] = jj_gen;
+        jj_la1[109] = jj_gen;
         ;
       }
       jj_consume_token(RPAREN);
       break;
       }
     default:
-      jj_la1[111] = jj_gen;
+      jj_la1[110] = jj_gen;
       jj_consume_token(-1);
       throw new ParseException();
     }
@@ -3082,14 +3124,14 @@
         break;
         }
       default:
-        jj_la1[112] = jj_gen;
+        jj_la1[111] = jj_gen;
         jj_consume_token(-1);
         throw new ParseException();
       }
       break;
       }
     default:
-      jj_la1[113] = jj_gen;
+      jj_la1[112] = jj_gen;
       jj_consume_token(-1);
       throw new ParseException();
     }
@@ -3115,7 +3157,7 @@
       break;
       }
     default:
-      jj_la1[114] = jj_gen;
+      jj_la1[113] = jj_gen;
       jj_consume_token(-1);
       throw new ParseException();
     }
@@ -3144,7 +3186,7 @@
       break;
       }
     default:
-      jj_la1[115] = jj_gen;
+      jj_la1[114] = jj_gen;
       jj_consume_token(-1);
       throw new ParseException();
     }
@@ -3199,12 +3241,13 @@
       case LPAREN:
       case NIL:
       case LBRACKET:
-      case ANON:{
+      case ANON:
+      case LT2:{
         ;
         break;
         }
       default:
-        jj_la1[116] = jj_gen;
+        jj_la1[115] = jj_gen;
         break label_29;
       }
     }
@@ -3254,12 +3297,13 @@
       case LPAREN:
       case NIL:
       case LBRACKET:
-      case ANON:{
+      case ANON:
+      case LT2:{
         ;
         break;
         }
       default:
-        jj_la1[117] = jj_gen;
+        jj_la1[116] = jj_gen;
         break label_30;
       }
     }
@@ -3270,6 +3314,38 @@
     throw new Error("Missing return statement in function");
 }
 
+  final public void AnnotationPath(TripleCollector acc, Node s, Node p, Path path, Node o) throws ParseException {
+    switch ((jj_ntk==-1)?jj_ntk_f():jj_ntk) {
+    case L_ANN:{
+      jj_consume_token(L_ANN);
+Node pAnn = preConditionAnnotation(s, p, path, o, token.beginLine, token.beginColumn) ;
+        Node x = createQuotedTriple(s, pAnn, o, token.beginLine, token.beginColumn);
+      PropertyListPathNotEmpty(x, acc);
+      jj_consume_token(R_ANN);
+      break;
+      }
+    default:
+      jj_la1[117] = jj_gen;
+      ;
+    }
+}
+
+  final public void Annotation(TripleCollector acc, Node s, Node p, Path path, Node o) throws ParseException {
+    switch ((jj_ntk==-1)?jj_ntk_f():jj_ntk) {
+    case L_ANN:{
+      jj_consume_token(L_ANN);
+Node pAnn = preConditionAnnotation(s, p, path, o, token.beginLine, token.beginColumn) ;
+        Node x = createQuotedTriple(s, p, o, token.beginLine, token.beginColumn);
+      PropertyListNotEmpty(x, acc);
+      jj_consume_token(R_ANN);
+      break;
+      }
+    default:
+      jj_la1[118] = jj_gen;
+      ;
+    }
+}
+
   final public Node GraphNode(TripleCollectorMark acc) throws ParseException {Node n ;
     switch ((jj_ntk==-1)?jj_ntk_f():jj_ntk) {
     case IRIref:
@@ -3294,7 +3370,8 @@
     case STRING_LITERAL_LONG1:
     case STRING_LITERAL_LONG2:
     case NIL:
-    case ANON:{
+    case ANON:
+    case LT2:{
       n = VarOrTerm();
 {if ("" != null) return n ;}
       break;
@@ -3306,7 +3383,7 @@
       break;
       }
     default:
-      jj_la1[118] = jj_gen;
+      jj_la1[119] = jj_gen;
       jj_consume_token(-1);
       throw new ParseException();
     }
@@ -3337,7 +3414,8 @@
     case STRING_LITERAL_LONG1:
     case STRING_LITERAL_LONG2:
     case NIL:
-    case ANON:{
+    case ANON:
+    case LT2:{
       n = VarOrTerm();
 {if ("" != null) return n ;}
       break;
@@ -3349,54 +3427,14 @@
       break;
       }
     default:
-      jj_la1[119] = jj_gen;
-      jj_consume_token(-1);
-      throw new ParseException();
-    }
-    throw new Error("Missing return statement in function");
-}
-
-  final public Node VarOrTerm() throws ParseException {Node n = null ;
-    switch ((jj_ntk==-1)?jj_ntk_f():jj_ntk) {
-    case VAR1:
-    case VAR2:{
-      n = Var();
-      break;
-      }
-    case IRIref:
-    case PNAME_NS:
-    case PNAME_LN:
-    case BLANK_NODE_LABEL:
-    case TRUE:
-    case FALSE:
-    case INTEGER:
-    case DECIMAL:
-    case DOUBLE:
-    case INTEGER_POSITIVE:
-    case DECIMAL_POSITIVE:
-    case DOUBLE_POSITIVE:
-    case INTEGER_NEGATIVE:
-    case DECIMAL_NEGATIVE:
-    case DOUBLE_NEGATIVE:
-    case STRING_LITERAL1:
-    case STRING_LITERAL2:
-    case STRING_LITERAL_LONG1:
-    case STRING_LITERAL_LONG2:
-    case NIL:
-    case ANON:{
-      n = GraphTerm();
-      break;
-      }
-    default:
       jj_la1[120] = jj_gen;
       jj_consume_token(-1);
       throw new ParseException();
     }
-{if ("" != null) return n ;}
     throw new Error("Missing return statement in function");
 }
 
-  final public Node VarOrIri() throws ParseException {Node n = null ; String iri ;
+  final public Node VarOrTerm() throws ParseException {Node n = null ; String iri ;
     switch ((jj_ntk==-1)?jj_ntk_f():jj_ntk) {
     case VAR1:
     case VAR2:{
@@ -3407,71 +3445,6 @@
     case PNAME_NS:
     case PNAME_LN:{
       iri = iri();
-n = createNode(iri) ;
-      break;
-      }
-    default:
-      jj_la1[121] = jj_gen;
-      jj_consume_token(-1);
-      throw new ParseException();
-    }
-{if ("" != null) return n ;}
-    throw new Error("Missing return statement in function");
-}
-
-  final public Node VarOrBlankNodeOrIri() throws ParseException {Node n = null ; String iri ;
-    switch ((jj_ntk==-1)?jj_ntk_f():jj_ntk) {
-    case VAR1:
-    case VAR2:{
-      n = Var();
-      break;
-      }
-    case BLANK_NODE_LABEL:
-    case ANON:{
-      n = BlankNode();
-      break;
-      }
-    case IRIref:
-    case PNAME_NS:
-    case PNAME_LN:{
-      iri = iri();
-n = createNode(iri) ;
-      break;
-      }
-    default:
-      jj_la1[122] = jj_gen;
-      jj_consume_token(-1);
-      throw new ParseException();
-    }
-{if ("" != null) return n ;}
-    throw new Error("Missing return statement in function");
-}
-
-  final public Var Var() throws ParseException {Token t ;
-    switch ((jj_ntk==-1)?jj_ntk_f():jj_ntk) {
-    case VAR1:{
-      t = jj_consume_token(VAR1);
-      break;
-      }
-    case VAR2:{
-      t = jj_consume_token(VAR2);
-      break;
-      }
-    default:
-      jj_la1[123] = jj_gen;
-      jj_consume_token(-1);
-      throw new ParseException();
-    }
-{if ("" != null) return createVariable(t.image, t.beginLine, t.beginColumn) ;}
-    throw new Error("Missing return statement in function");
-}
-
-  final public Node GraphTerm() throws ParseException {Node n ; String iri ;
-    switch ((jj_ntk==-1)?jj_ntk_f():jj_ntk) {
-    case IRIref:
-    case PNAME_NS:
-    case PNAME_LN:{
-      iri = iri();
 {if ("" != null) return createNode(iri) ;}
       break;
       }
@@ -3513,11 +3486,146 @@
 {if ("" != null) return nRDFnil ;}
       break;
       }
+    case LT2:{
+      n = QuotedTriple();
+      break;
+      }
+    default:
+      jj_la1[121] = jj_gen;
+      jj_consume_token(-1);
+      throw new ParseException();
+    }
+{if ("" != null) return n ;}
+    throw new Error("Missing return statement in function");
+}
+
+  final public Node QuotedTriple() throws ParseException {Node n = null ; Token t ; Node s , p , o ;
+    t = jj_consume_token(LT2);
+    s = VarOrTerm();
+    p = Verb();
+    o = VarOrTerm();
+n = createQuotedTriple(s, p, o, t.beginLine, t.beginColumn);
+    jj_consume_token(GT2);
+{if ("" != null) return n;}
+    throw new Error("Missing return statement in function");
+}
+
+  final public Node QuotedTripleData() throws ParseException {Node n = null ; Token t ; String iri ; Node s , p , o ;
+    t = jj_consume_token(LT2);
+    s = DataValueTerm();
+    switch ((jj_ntk==-1)?jj_ntk_f():jj_ntk) {
+    case IRIref:
+    case PNAME_NS:
+    case PNAME_LN:{
+      iri = iri();
+p = createNode(iri) ;
+      break;
+      }
+    case KW_A:{
+      jj_consume_token(KW_A);
+p = nRDFtype ;
+      break;
+      }
+    default:
+      jj_la1[122] = jj_gen;
+      jj_consume_token(-1);
+      throw new ParseException();
+    }
+    o = DataValueTerm();
+n = createQuotedTriple(s, p, o, t.beginLine, t.beginColumn);
+    jj_consume_token(GT2);
+{if ("" != null) return n;}
+    throw new Error("Missing return statement in function");
+}
+
+  final public Node DataValueTerm() throws ParseException {Node n = null ; String iri ; Node s , p , o ;
+    switch ((jj_ntk==-1)?jj_ntk_f():jj_ntk) {
+    case IRIref:
+    case PNAME_NS:
+    case PNAME_LN:{
+      iri = iri();
+{if ("" != null) return createNode(iri) ;}
+      break;
+      }
+    case STRING_LITERAL1:
+    case STRING_LITERAL2:
+    case STRING_LITERAL_LONG1:
+    case STRING_LITERAL_LONG2:{
+      n = RDFLiteral();
+{if ("" != null) return n ;}
+      break;
+      }
+    case INTEGER:
+    case DECIMAL:
+    case DOUBLE:
+    case INTEGER_POSITIVE:
+    case DECIMAL_POSITIVE:
+    case DOUBLE_POSITIVE:
+    case INTEGER_NEGATIVE:
+    case DECIMAL_NEGATIVE:
+    case DOUBLE_NEGATIVE:{
+      n = NumericLiteral();
+{if ("" != null) return n ;}
+      break;
+      }
+    case TRUE:
+    case FALSE:{
+      n = BooleanLiteral();
+{if ("" != null) return n ;}
+      break;
+      }
+    case LT2:{
+      n = QuotedTripleData();
+{if ("" != null) return n ;}
+      break;
+      }
+    default:
+      jj_la1[123] = jj_gen;
+      jj_consume_token(-1);
+      throw new ParseException();
+    }
+    throw new Error("Missing return statement in function");
+}
+
+  final public Node VarOrIri() throws ParseException {Node n = null ; String iri ;
+    switch ((jj_ntk==-1)?jj_ntk_f():jj_ntk) {
+    case VAR1:
+    case VAR2:{
+      n = Var();
+      break;
+      }
+    case IRIref:
+    case PNAME_NS:
+    case PNAME_LN:{
+      iri = iri();
+n = createNode(iri) ;
+      break;
+      }
     default:
       jj_la1[124] = jj_gen;
       jj_consume_token(-1);
       throw new ParseException();
     }
+{if ("" != null) return n ;}
+    throw new Error("Missing return statement in function");
+}
+
+  final public Var Var() throws ParseException {Token t ;
+    switch ((jj_ntk==-1)?jj_ntk_f():jj_ntk) {
+    case VAR1:{
+      t = jj_consume_token(VAR1);
+      break;
+      }
+    case VAR2:{
+      t = jj_consume_token(VAR2);
+      break;
+      }
+    default:
+      jj_la1[125] = jj_gen;
+      jj_consume_token(-1);
+      throw new ParseException();
+    }
+{if ("" != null) return createVariable(t.image, t.beginLine, t.beginColumn) ;}
     throw new Error("Missing return statement in function");
 }
 
@@ -3537,7 +3645,7 @@
         break;
         }
       default:
-        jj_la1[125] = jj_gen;
+        jj_la1[126] = jj_gen;
         break label_31;
       }
       jj_consume_token(SC_OR);
@@ -3558,7 +3666,7 @@
         break;
         }
       default:
-        jj_la1[126] = jj_gen;
+        jj_la1[127] = jj_gen;
         break label_32;
       }
       jj_consume_token(SC_AND);
@@ -3637,14 +3745,14 @@
         break;
         }
       default:
-        jj_la1[127] = jj_gen;
+        jj_la1[128] = jj_gen;
         jj_consume_token(-1);
         throw new ParseException();
       }
       break;
       }
     default:
-      jj_la1[128] = jj_gen;
+      jj_la1[129] = jj_gen;
       ;
     }
 {if ("" != null) return expr1 ;}
@@ -3674,7 +3782,7 @@
         break;
         }
       default:
-        jj_la1[129] = jj_gen;
+        jj_la1[130] = jj_gen;
         break label_33;
       }
       switch ((jj_ntk==-1)?jj_ntk_f():jj_ntk) {
@@ -3716,7 +3824,7 @@
           break;
           }
         default:
-          jj_la1[130] = jj_gen;
+          jj_la1[131] = jj_gen;
           jj_consume_token(-1);
           throw new ParseException();
         }
@@ -3729,7 +3837,7 @@
             break;
             }
           default:
-            jj_la1[131] = jj_gen;
+            jj_la1[132] = jj_gen;
             break label_34;
           }
           switch ((jj_ntk==-1)?jj_ntk_f():jj_ntk) {
@@ -3746,7 +3854,7 @@
             break;
             }
           default:
-            jj_la1[132] = jj_gen;
+            jj_la1[133] = jj_gen;
             jj_consume_token(-1);
             throw new ParseException();
           }
@@ -3758,7 +3866,7 @@
         break;
         }
       default:
-        jj_la1[133] = jj_gen;
+        jj_la1[134] = jj_gen;
         jj_consume_token(-1);
         throw new ParseException();
       }
@@ -3778,7 +3886,7 @@
         break;
         }
       default:
-        jj_la1[134] = jj_gen;
+        jj_la1[135] = jj_gen;
         break label_35;
       }
       switch ((jj_ntk==-1)?jj_ntk_f():jj_ntk) {
@@ -3795,7 +3903,7 @@
         break;
         }
       default:
-        jj_la1[135] = jj_gen;
+        jj_la1[136] = jj_gen;
         jj_consume_token(-1);
         throw new ParseException();
       }
@@ -3829,6 +3937,11 @@
     case PNAME_LN:
     case VAR1:
     case VAR2:
+    case TRIPLE:
+    case IS_TRIPLE:
+    case SUBJECT:
+    case PREDICATE:
+    case OBJECT:
     case EXISTS:
     case NOT:
     case COUNT:
@@ -3905,13 +4018,14 @@
     case STRING_LITERAL2:
     case STRING_LITERAL_LONG1:
     case STRING_LITERAL_LONG2:
-    case LPAREN:{
+    case LPAREN:
+    case LT2:{
       expr = PrimaryExpression();
 {if ("" != null) return expr ;}
       break;
       }
     default:
-      jj_la1[136] = jj_gen;
+      jj_la1[137] = jj_gen;
       jj_consume_token(-1);
       throw new ParseException();
     }
@@ -3925,6 +4039,11 @@
 {if ("" != null) return expr ;}
       break;
       }
+    case TRIPLE:
+    case IS_TRIPLE:
+    case SUBJECT:
+    case PREDICATE:
+    case OBJECT:
     case EXISTS:
     case NOT:
     case COUNT:
@@ -4030,14 +4149,81 @@
 {if ("" != null) return asExpr(n) ;}
       break;
       }
+    case LT2:{
+      n = ExprQuotedTriple();
+{if ("" != null) return asExpr(n) ;}
+      break;
+      }
     default:
-      jj_la1[137] = jj_gen;
+      jj_la1[138] = jj_gen;
       jj_consume_token(-1);
       throw new ParseException();
     }
     throw new Error("Missing return statement in function");
 }
 
+  final public Node ExprVarOrTerm() throws ParseException {Node n; String s;
+    switch ((jj_ntk==-1)?jj_ntk_f():jj_ntk) {
+    case IRIref:
+    case PNAME_NS:
+    case PNAME_LN:{
+      s = iri();
+n = createNode(s);
+      break;
+      }
+    case STRING_LITERAL1:
+    case STRING_LITERAL2:
+    case STRING_LITERAL_LONG1:
+    case STRING_LITERAL_LONG2:{
+      n = RDFLiteral();
+      break;
+      }
+    case INTEGER:
+    case DECIMAL:
+    case DOUBLE:
+    case INTEGER_POSITIVE:
+    case DECIMAL_POSITIVE:
+    case DOUBLE_POSITIVE:
+    case INTEGER_NEGATIVE:
+    case DECIMAL_NEGATIVE:
+    case DOUBLE_NEGATIVE:{
+      n = NumericLiteral();
+      break;
+      }
+    case TRUE:
+    case FALSE:{
+      n = BooleanLiteral();
+      break;
+      }
+    case VAR1:
+    case VAR2:{
+      n = Var();
+      break;
+      }
+    case LT2:{
+      n = ExprQuotedTriple();
+      break;
+      }
+    default:
+      jj_la1[139] = jj_gen;
+      jj_consume_token(-1);
+      throw new ParseException();
+    }
+{if ("" != null) return n;}
+    throw new Error("Missing return statement in function");
+}
+
+  final public Node ExprQuotedTriple() throws ParseException {Token t ; Node s,p,o,n;
+    t = jj_consume_token(LT2);
+    s = ExprVarOrTerm();
+    p = Verb();
+    o = ExprVarOrTerm();
+n = createQuotedTriple(s, p, o, t.beginLine, t.beginColumn);
+    jj_consume_token(GT2);
+{if ("" != null) return n;}
+    throw new Error("Missing return statement in function");
+}
+
   final public Expr BrackettedExpression() throws ParseException {Expr expr ;
     jj_consume_token(LPAREN);
     expr = Expression();
@@ -4135,7 +4321,7 @@
         break;
         }
       default:
-        jj_la1[138] = jj_gen;
+        jj_la1[140] = jj_gen;
         jj_consume_token(-1);
         throw new ParseException();
       }
@@ -4502,8 +4688,52 @@
 {if ("" != null) return expr ;}
       break;
       }
+    case IS_TRIPLE:{
+      jj_consume_token(IS_TRIPLE);
+      jj_consume_token(LPAREN);
+      expr = Expression();
+      jj_consume_token(RPAREN);
+{if ("" != null) return new E_IsTriple(expr) ;}
+      break;
+      }
+    case TRIPLE:{
+      jj_consume_token(TRIPLE);
+      jj_consume_token(LPAREN);
+      expr1 = Expression();
+      jj_consume_token(COMMA);
+      expr2 = Expression();
+      jj_consume_token(COMMA);
+      expr3 = Expression();
+      jj_consume_token(RPAREN);
+{if ("" != null) return new E_TripleFn(expr1, expr2, expr3) ;}
+      break;
+      }
+    case SUBJECT:{
+      jj_consume_token(SUBJECT);
+      jj_consume_token(LPAREN);
+      expr = Expression();
+      jj_consume_token(RPAREN);
+{if ("" != null) return new E_TripleSubject(expr) ;}
+      break;
+      }
+    case PREDICATE:{
+      jj_consume_token(PREDICATE);
+      jj_consume_token(LPAREN);
+      expr = Expression();
+      jj_consume_token(RPAREN);
+{if ("" != null) return new E_TriplePredicate(expr) ;}
+      break;
+      }
+    case OBJECT:{
+      jj_consume_token(OBJECT);
+      jj_consume_token(LPAREN);
+      expr = Expression();
+      jj_consume_token(RPAREN);
+{if ("" != null) return new E_TripleObject(expr) ;}
+      break;
+      }
     default:
-      jj_la1[139] = jj_gen;
+      jj_la1[141] = jj_gen;
       jj_consume_token(-1);
       throw new ParseException();
     }
@@ -4523,7 +4753,7 @@
       break;
       }
     default:
-      jj_la1[140] = jj_gen;
+      jj_la1[142] = jj_gen;
       ;
     }
     jj_consume_token(RPAREN);
@@ -4544,7 +4774,7 @@
       break;
       }
     default:
-      jj_la1[141] = jj_gen;
+      jj_la1[143] = jj_gen;
       ;
     }
     jj_consume_token(RPAREN);
@@ -4567,7 +4797,7 @@
       break;
       }
     default:
-      jj_la1[142] = jj_gen;
+      jj_la1[144] = jj_gen;
       ;
     }
     jj_consume_token(RPAREN);
@@ -4607,7 +4837,7 @@
         break;
         }
       default:
-        jj_la1[143] = jj_gen;
+        jj_la1[145] = jj_gen;
         ;
       }
       switch ((jj_ntk==-1)?jj_ntk_f():jj_ntk) {
@@ -4620,6 +4850,11 @@
       case PNAME_LN:
       case VAR1:
       case VAR2:
+      case TRIPLE:
+      case IS_TRIPLE:
+      case SUBJECT:
+      case PREDICATE:
+      case OBJECT:
       case EXISTS:
       case NOT:
       case COUNT:
@@ -4697,6 +4932,7 @@
       case STRING_LITERAL_LONG1:
       case STRING_LITERAL_LONG2:
       case LPAREN:
+      case LT2:
       case BANG:
       case PLUS:
       case MINUS:{
@@ -4704,7 +4940,7 @@
         break;
         }
       default:
-        jj_la1[144] = jj_gen;
+        jj_la1[146] = jj_gen;
         jj_consume_token(-1);
         throw new ParseException();
       }
@@ -4723,7 +4959,7 @@
         break;
         }
       default:
-        jj_la1[145] = jj_gen;
+        jj_la1[147] = jj_gen;
         ;
       }
       expr = Expression();
@@ -4741,7 +4977,7 @@
         break;
         }
       default:
-        jj_la1[146] = jj_gen;
+        jj_la1[148] = jj_gen;
         ;
       }
       expr = Expression();
@@ -4759,7 +4995,7 @@
         break;
         }
       default:
-        jj_la1[147] = jj_gen;
+        jj_la1[149] = jj_gen;
         ;
       }
       expr = Expression();
@@ -4777,7 +5013,7 @@
         break;
         }
       default:
-        jj_la1[148] = jj_gen;
+        jj_la1[150] = jj_gen;
         ;
       }
       expr = Expression();
@@ -4795,7 +5031,7 @@
         break;
         }
       default:
-        jj_la1[149] = jj_gen;
+        jj_la1[151] = jj_gen;
         ;
       }
       expr = Expression();
@@ -4813,7 +5049,7 @@
         break;
         }
       default:
-        jj_la1[150] = jj_gen;
+        jj_la1[152] = jj_gen;
         ;
       }
       expr = Expression();
@@ -4826,7 +5062,7 @@
         break;
         }
       default:
-        jj_la1[151] = jj_gen;
+        jj_la1[153] = jj_gen;
         ;
       }
       jj_consume_token(RPAREN);
@@ -4834,7 +5070,7 @@
       break;
       }
     default:
-      jj_la1[152] = jj_gen;
+      jj_la1[154] = jj_gen;
       jj_consume_token(-1);
       throw new ParseException();
     }
@@ -4857,7 +5093,7 @@
       break;
       }
     default:
-      jj_la1[153] = jj_gen;
+      jj_la1[155] = jj_gen;
       ;
     }
 if ( a == null )
@@ -4891,14 +5127,14 @@
         break;
         }
       default:
-        jj_la1[154] = jj_gen;
+        jj_la1[156] = jj_gen;
         jj_consume_token(-1);
         throw new ParseException();
       }
       break;
       }
     default:
-      jj_la1[155] = jj_gen;
+      jj_la1[157] = jj_gen;
       ;
     }
 {if ("" != null) return createLiteral(lex, lang, uri) ;}
@@ -4926,7 +5162,7 @@
       break;
       }
     default:
-      jj_la1[156] = jj_gen;
+      jj_la1[158] = jj_gen;
       jj_consume_token(-1);
       throw new ParseException();
     }
@@ -4952,7 +5188,7 @@
       break;
       }
     default:
-      jj_la1[157] = jj_gen;
+      jj_la1[159] = jj_gen;
       jj_consume_token(-1);
       throw new ParseException();
     }
@@ -4977,7 +5213,7 @@
       break;
       }
     default:
-      jj_la1[158] = jj_gen;
+      jj_la1[160] = jj_gen;
       jj_consume_token(-1);
       throw new ParseException();
     }
@@ -5002,7 +5238,7 @@
       break;
       }
     default:
-      jj_la1[159] = jj_gen;
+      jj_la1[161] = jj_gen;
       jj_consume_token(-1);
       throw new ParseException();
     }
@@ -5022,7 +5258,7 @@
       break;
       }
     default:
-      jj_la1[160] = jj_gen;
+      jj_la1[162] = jj_gen;
       jj_consume_token(-1);
       throw new ParseException();
     }
@@ -5052,7 +5288,7 @@
       break;
       }
     default:
-      jj_la1[161] = jj_gen;
+      jj_la1[163] = jj_gen;
       jj_consume_token(-1);
       throw new ParseException();
     }
@@ -5076,7 +5312,7 @@
       break;
       }
     default:
-      jj_la1[162] = jj_gen;
+      jj_la1[164] = jj_gen;
       jj_consume_token(-1);
       throw new ParseException();
     }
@@ -5096,7 +5332,7 @@
       break;
       }
     default:
-      jj_la1[163] = jj_gen;
+      jj_la1[165] = jj_gen;
       jj_consume_token(-1);
       throw new ParseException();
     }
@@ -5116,7 +5352,7 @@
       break;
       }
     default:
-      jj_la1[164] = jj_gen;
+      jj_la1[166] = jj_gen;
       jj_consume_token(-1);
       throw new ParseException();
     }
@@ -5138,7 +5374,7 @@
   public Token jj_nt;
   private int jj_ntk;
   private int jj_gen;
-  final private int[] jj_la1 = new int[165];
+  final private int[] jj_la1 = new int[167];
   static private int[] jj_la1_0;
   static private int[] jj_la1_1;
   static private int[] jj_la1_2;
@@ -5156,25 +5392,25 @@
 	   jj_la1_init_6();
 	}
 	private static void jj_la1_init_0() {
-	   jj_la1_0 = new int[] {0xe400000,0x200,0x300000,0x300000,0x0,0x1800000,0x1800000,0xc000,0xc000,0xc000,0x0,0x0,0xfc00,0x0,0xdc00,0xdc00,0x0,0x0,0x0,0x1c00,0x0,0x0,0x0,0x40000000,0x30000000,0xdc00,0x0,0xdc00,0x1c00,0xdc00,0x0,0xdc00,0xdc00,0x20000000,0x10000000,0x30000000,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x1c00,0x0,0x1c00,0x0,0xfc00,0x0,0x0,0xfc00,0xfc00,0xfc00,0x0,0x400000,0xfc00,0x0,0x0,0xfc00,0xfc00,0x0,0x0,0x0,0xc000,0x1c00,0xc000,0x0,0x0,0x1c00,0x0,0x1c00,0x0,0x1c00,0x800000,0x0,0x0,0x0,0x0,0xfc00,0xfc00,0x0,0xfc00,0x8dc00,0x0,0x8dc00,0x8dc00,0x0,0xfc00,0x8dc00,0x8dc00,0x0,0x8dc00,0x8dc00,0x0,0x0,0x0,0x0,0x81c00,0x0,0x81c00,0x0,0x81c00,0x81c00,0x81c00,0x81c00,0x0,0x0,0xfc00,0xfc00,0xfc00,0xfc00,0xfc00,0xdc00,0xfc00,0xc000,0x3c00,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0xdc00,0xdc00,0x0,0x0,0x0,0x0,0x0,0x800000,0xdc00,0x800000,0x800000,0x800000,0x800000,0x800000,0x800000,0x0,0x0,0x0,0x10000,0x10000,0x0,0x0,0x0,0x0,0x0,0x0,0x1c00,0x1800,0x2000,};
+	   jj_la1_0 = new int[] {0x7200000,0x180000,0x180000,0x0,0xc00000,0xc00000,0x6000,0x6000,0x6000,0x0,0x0,0x7e00,0x0,0x6e00,0x6e00,0x0,0x0,0x0,0xe00,0x0,0x0,0x0,0x20000000,0x18000000,0x6e00,0x0,0x6e00,0xe00,0x6e00,0x0,0x6e00,0x6e00,0x10000000,0x8000000,0x18000000,0x80000000,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0xe00,0x0,0xe00,0x0,0x7e00,0x0,0x0,0x7e00,0x7e00,0x7e00,0x0,0x200000,0x7e00,0x80000000,0x0,0x7e00,0x7e00,0x0,0x80000000,0x0,0x6000,0xe00,0x6000,0x0,0x0,0xe00,0x0,0xe00,0x0,0xe00,0x400000,0x0,0x0,0x0,0x0,0x7e00,0x7e00,0x0,0x7e00,0x46e00,0x0,0x46e00,0x46e00,0x0,0x7e00,0x46e00,0x46e00,0x0,0x46e00,0x46e00,0x0,0x0,0x0,0x0,0x40e00,0x0,0x40e00,0x0,0x40e00,0x40e00,0x40e00,0x40e00,0x0,0x0,0x7e00,0x7e00,0x0,0x0,0x7e00,0x7e00,0x7e00,0x40e00,0xe00,0x6e00,0x6000,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x6e00,0x6e00,0x6e00,0x0,0x0,0x0,0x0,0x0,0x400000,0x6e00,0x400000,0x400000,0x400000,0x400000,0x400000,0x400000,0x0,0x0,0x0,0x8000,0x8000,0x0,0x0,0x0,0x0,0x0,0x0,0xe00,0xc00,0x1000,};
 	}
 	private static void jj_la1_init_1() {
-	   jj_la1_1 = new int[] {0x0,0x0,0x0,0x0,0x20,0x0,0x0,0x0,0x0,0x0,0x20,0x20,0x0,0x60,0x0,0x0,0x20,0x40,0x20,0x10,0x40,0x20000,0x40000,0x0,0x0,0x3e0c000,0x10000,0x3e0c000,0x3e0c000,0x3e0c00c,0xc,0x3e0c000,0x3e0c00c,0x0,0x0,0x0,0x1,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x10,0x100,0x100,0x110,0x0,0x100,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x3b01,0x0,0x0,0x0,0x0,0x3b01,0x0,0x0,0x2,0x0,0x0,0x0,0x2,0x0,0x2,0x400,0x3e0c000,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x8000,0x8000,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x3e0c000,0x3e0c000,0x0,0x3e0c000,0x0,0x0,0x0,0x0,0x3e0c000,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x3e00000,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,};
+	   jj_la1_1 = new int[] {0x0,0x0,0x0,0x10,0x0,0x0,0x0,0x0,0x0,0x10,0x10,0x0,0x30,0x0,0x0,0x10,0x20,0x10,0x8,0x20,0x200000,0x400000,0x0,0x0,0x3e0fe000,0x100000,0x3e0fe000,0x3e0fe000,0x3e0fe006,0x6,0x3e0fe000,0x3e0fe006,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x8,0x80,0x80,0x88,0x0,0x80,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x1d80,0x0,0x0,0x0,0x0,0x1d80,0x0,0x0,0x1,0x0,0x0,0x0,0x1,0x0,0x1,0x200,0x3e0fe000,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x80000,0x80000,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x3e0fe000,0x3e0fe000,0x0,0x0,0x3e0fe000,0x0,0x0,0x0,0x0,0x3e0fe000,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x3e000000,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,};
 	}
 	private static void jj_la1_init_2() {
-	   jj_la1_2 = new int[] {0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0xffffffdb,0x0,0xffffffdb,0xffffffdb,0xffffffdb,0x0,0xffffffdb,0xffffffdb,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x4,0x0,0x0,0x0,0x0,0x4,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0xffffffdb,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x20,0x20,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0xffffffdb,0xffffffdb,0x0,0xffffffdb,0x0,0x0,0x0,0x0,0xffffffdb,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x3,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,};
+	   jj_la1_2 = new int[] {0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0xfffffdb0,0x0,0xfffffdb0,0xfffffdb0,0xfffffdb0,0x0,0xfffffdb0,0xfffffdb0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x40,0x0,0x0,0x0,0x0,0x40,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0xfffffdb0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x200,0x200,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0xfffffdb0,0xfffffdb0,0x0,0x0,0xfffffdb0,0x0,0x0,0x0,0x0,0xfffffdb0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x30,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,};
 	}
 	private static void jj_la1_init_3() {
-	   jj_la1_3 = new int[] {0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x6000000,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x1dfffff,0x0,0x1dfffff,0x1dfffff,0x1dfffff,0x0,0x1dfffff,0x1dfffff,0x0,0x0,0x0,0x0,0x0,0xf0000000,0xf0000000,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x10000000,0x30000000,0x0,0x0,0x0,0x0,0x0,0x6000000,0x0,0x0,0x6000000,0x6000000,0x6000000,0x0,0x0,0x6000000,0x0,0x0,0x6000000,0x6000000,0x0,0x0,0x0,0x0,0x6000000,0x0,0x0,0x0,0x6000000,0x0,0x6000000,0x0,0x1dfffff,0x0,0x0,0x0,0x0,0x0,0x6000000,0x6000000,0x0,0x6000000,0x0,0x0,0x0,0x0,0x0,0x6000000,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x6000000,0x6000000,0x6000000,0x6000000,0x6000000,0x0,0x0,0x0,0x6000000,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x7dfffff,0x7dfffff,0x0,0x1dfffff,0x0,0x0,0x0,0x0,0x7dfffff,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x6000000,0x0,0x0,0x0,0x0,};
+	   jj_la1_3 = new int[] {0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x60000000,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x1dffffff,0x0,0x1dffffff,0x1dffffff,0x1dffffff,0x0,0x1dffffff,0x1dffffff,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x60000000,0x0,0x0,0x60000000,0x60000000,0x60000000,0x0,0x0,0x60000000,0x0,0x0,0x60000000,0x60000000,0x0,0x0,0x0,0x0,0x60000000,0x0,0x0,0x0,0x60000000,0x0,0x60000000,0x0,0x1dffffff,0x0,0x0,0x0,0x0,0x0,0x60000000,0x60000000,0x0,0x60000000,0x0,0x0,0x0,0x0,0x0,0x60000000,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x60000000,0x60000000,0x0,0x0,0x60000000,0x60000000,0x60000000,0x0,0x60000000,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x7dffffff,0x7dffffff,0x60000000,0x0,0x1dffffff,0x0,0x0,0x0,0x0,0x7dffffff,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x60000000,0x0,0x0,0x0,0x0,};
 	}
 	private static void jj_la1_init_4() {
-	   jj_la1_4 = new int[] {0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x3fe0000,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x427f,0x427f,0x100,0x400,0x100,0x100,0x100,0x100,0x100,0x100,0x4000,0x0,0x0,0x8000,0x0,0x0,0x1000,0x3000,0x3fe0000,0x0,0x0,0x3fe0000,0x3fe0000,0x3fe0000,0x0,0x0,0x3fe0000,0x0,0x0,0x3fe0000,0x3fe0000,0x0,0x0,0x100,0x0,0x3fe0000,0x0,0x0,0x0,0x3fe0000,0x0,0x3fe0000,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x3fe0000,0x3fe0000,0x0,0x3fe0000,0x0,0x0,0x0,0x0,0x0,0x3fe0000,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x3fe0000,0x3fe0000,0x3fe0000,0x3fe0000,0x3fe0000,0x0,0x0,0x0,0x3fe0000,0x0,0x0,0x0,0x0,0x3f00000,0x3f00000,0x0,0x0,0x3f00000,0x0,0x0,0x3fe0000,0x3fe0000,0x0,0x0,0x0,0x0,0x0,0x0,0x3fe0000,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x3fe0000,0xe0000,0x700000,0x3800000,0x0,0x0,0x0,0x0,0x0,};
+	   jj_la1_4 = new int[] {0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x3fe00000,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x427ff,0x427ff,0x1000,0x4000,0x1000,0x1000,0x1000,0x1000,0x1000,0x1000,0x40000,0x1,0x3,0x80000,0x0,0x0,0x10000,0x30000,0x3fe00000,0x0,0x0,0x3fe00000,0x3fe00000,0x3fe00000,0x0,0x0,0x3fe00000,0x0,0x0,0x3fe00000,0x3fe00000,0x0,0x0,0x1000,0x0,0x3fe00000,0x0,0x0,0x0,0x3fe00000,0x0,0x3fe00000,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x3fe00000,0x3fe00000,0x0,0x3fe00000,0x0,0x0,0x0,0x0,0x0,0x3fe00000,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x3fe00000,0x3fe00000,0x0,0x0,0x3fe00000,0x3fe00000,0x3fe00000,0x0,0x3fe00000,0x0,0x0,0x0,0x0,0x0,0x0,0x3f000000,0x3f000000,0x0,0x0,0x3f000000,0x0,0x0,0x3fe00000,0x3fe00000,0x3fe00000,0x0,0x0,0x0,0x0,0x0,0x0,0x3fe00000,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x3fe00000,0xe00000,0x7000000,0x38000000,0x0,0x0,0x0,0x0,0x0,};
 	}
 	private static void jj_la1_init_5() {
-	   jj_la1_5 = new int[] {0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x20,0x20,0x20000020,0x0,0x0,0x14be,0x100,0x0,0x20000000,0x0,0x100,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x20,0x0,0x20,0x20,0x20,0x0,0x20,0x20,0x0,0x0,0x0,0x0,0x2000,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x14be,0x0,0x8000,0x14be,0x14be,0x14be,0x8000,0x0,0x14be,0x100,0x8000,0x14be,0x14be,0x8000,0x100,0x0,0xa0,0x1e,0x0,0xa0,0xa0,0x1e,0xa0,0x1e,0x0,0x20,0x0,0x4000,0xa0,0x4000,0xa0,0x14be,0x14be,0x8000,0x14be,0x0,0x2000,0x0,0x0,0x4000,0x14be,0x400020,0x400020,0x2000,0x400020,0x400020,0x4000,0x0,0x40000000,0x28000000,0x400020,0x28000000,0x400020,0x0,0x0,0x20,0x0,0x0,0x420,0x420,0x14be,0x14be,0x14be,0x14be,0x109e,0x0,0x1000,0x0,0x109e,0x2000000,0x4000000,0x3f0000,0x3f0000,0x18000000,0x0,0x60000000,0x60000000,0x18000000,0x60000000,0x60000000,0x1840003e,0x3e,0xa0,0x0,0x4000,0x4000,0x4000,0x0,0x3840003e,0x0,0x0,0x0,0x0,0x0,0x0,0x2000,0x0,0xa0,0x80000000,0x80000000,0x0,0x0,0x0,0x0,0x0,0x1e,0x0,0x0,0x1000,};
+	   jj_la1_5 = new int[] {0x0,0x0,0x0,0x0,0x0,0x0,0x200,0x200,0x200,0x0,0x0,0x8014be0,0x1000,0x0,0x0,0x0,0x1000,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x200,0x0,0x200,0x200,0x200,0x0,0x200,0x200,0x0,0x0,0x0,0x0,0x20000,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x8014be0,0x0,0x80000,0x8014be0,0x8014be0,0x8014be0,0x80000,0x0,0x8014be0,0x1000,0x80000,0x8014be0,0x8014be0,0x80000,0x1000,0x0,0xa00,0x80001e0,0x0,0xa00,0xa00,0x80001e0,0xa00,0x80001e0,0x0,0x200,0x0,0x40000,0xa00,0x40000,0xa00,0x8014be0,0x8014be0,0x80000,0x8014be0,0x0,0x20000,0x0,0x0,0x40000,0x8014be0,0x40000200,0x40000200,0x20000,0x40000200,0x40000200,0x40000,0x0,0x0,0x0,0x40000200,0x0,0x40000200,0x0,0x0,0x200,0x0,0x0,0x4200,0x4200,0x8014be0,0x8014be0,0x10000000,0x10000000,0x8014be0,0x8014be0,0x80109e0,0x0,0x80001e0,0x0,0x0,0x0,0x0,0x3f00000,0x3f00000,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x480003e0,0x80003e0,0x80001e0,0xa00,0x0,0x40000,0x40000,0x40000,0x0,0x480003e0,0x0,0x0,0x0,0x0,0x0,0x0,0x20000,0x0,0xa00,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x1e0,0x0,0x0,0x10000,};
 	}
 	private static void jj_la1_init_6() {
-	   jj_la1_6 = new int[] {0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x4,0x4,0x0,0x4,0x4,0x0,0x2,0x0,0x20,0x4,0x20,0x0,0x2,0x4,0x4,0x0,0x4,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,};
+	   jj_la1_6 = new int[] {0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x20,0x0,0x0,0x0,0x0,0x0,0x20,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x400,0x400,0x0,0x400,0x400,0x0,0x200,0x40,0x2028,0x400,0x2028,0x0,0x200,0x400,0x400,0x0,0x400,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x2,0x4,0x0,0x0,0x18,0x0,0x60,0x60,0x18,0x60,0x60,0x18,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x38,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x80,0x80,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,};
 	}
 
   /** Constructor with InputStream. */
@@ -5188,7 +5424,7 @@
 	 token = new Token();
 	 jj_ntk = -1;
 	 jj_gen = 0;
-	 for (int i = 0; i < 165; i++) jj_la1[i] = -1;
+	 for (int i = 0; i < 167; i++) jj_la1[i] = -1;
   }
 
   /** Reinitialise. */
@@ -5202,7 +5438,7 @@
 	 token = new Token();
 	 jj_ntk = -1;
 	 jj_gen = 0;
-	 for (int i = 0; i < 165; i++) jj_la1[i] = -1;
+	 for (int i = 0; i < 167; i++) jj_la1[i] = -1;
   }
 
   /** Constructor. */
@@ -5212,7 +5448,7 @@
 	 token = new Token();
 	 jj_ntk = -1;
 	 jj_gen = 0;
-	 for (int i = 0; i < 165; i++) jj_la1[i] = -1;
+	 for (int i = 0; i < 167; i++) jj_la1[i] = -1;
   }
 
   /** Reinitialise. */
@@ -5230,7 +5466,7 @@
 	 token = new Token();
 	 jj_ntk = -1;
 	 jj_gen = 0;
-	 for (int i = 0; i < 165; i++) jj_la1[i] = -1;
+	 for (int i = 0; i < 167; i++) jj_la1[i] = -1;
   }
 
   /** Constructor with generated Token Manager. */
@@ -5239,7 +5475,7 @@
 	 token = new Token();
 	 jj_ntk = -1;
 	 jj_gen = 0;
-	 for (int i = 0; i < 165; i++) jj_la1[i] = -1;
+	 for (int i = 0; i < 167; i++) jj_la1[i] = -1;
   }
 
   /** Reinitialise. */
@@ -5248,7 +5484,7 @@
 	 token = new Token();
 	 jj_ntk = -1;
 	 jj_gen = 0;
-	 for (int i = 0; i < 165; i++) jj_la1[i] = -1;
+	 for (int i = 0; i < 167; i++) jj_la1[i] = -1;
   }
 
   private Token jj_consume_token(int kind) throws ParseException {
@@ -5299,12 +5535,12 @@
   /** Generate ParseException. */
   public ParseException generateParseException() {
 	 jj_expentries.clear();
-	 boolean[] la1tokens = new boolean[209];
+	 boolean[] la1tokens = new boolean[217];
 	 if (jj_kind >= 0) {
 	   la1tokens[jj_kind] = true;
 	   jj_kind = -1;
 	 }
-	 for (int i = 0; i < 165; i++) {
+	 for (int i = 0; i < 167; i++) {
 	   if (jj_la1[i] == jj_gen) {
 		 for (int j = 0; j < 32; j++) {
 		   if ((jj_la1_0[i] & (1<<j)) != 0) {
@@ -5331,7 +5567,7 @@
 		 }
 	   }
 	 }
-	 for (int i = 0; i < 209; i++) {
+	 for (int i = 0; i < 217; i++) {
 	   if (la1tokens[i]) {
 		 jj_expentry = new int[1];
 		 jj_expentry[0] = i;
diff --git a/jena-arq/src/main/java/org/apache/jena/sparql/lang/sparql_12/SPARQLParser12Constants.java b/jena-arq/src/main/java/org/apache/jena/sparql/lang/sparql_12/SPARQLParser12Constants.java
index 060b789..d3f8582 100644
--- a/jena-arq/src/main/java/org/apache/jena/sparql/lang/sparql_12/SPARQLParser12Constants.java
+++ b/jena-arq/src/main/java/org/apache/jena/sparql/lang/sparql_12/SPARQLParser12Constants.java
@@ -17,405 +17,421 @@
   /** RegularExpression Id. */
   int WSC = 8;
   /** RegularExpression Id. */
-  int BOM = 9;
+  int IRIref = 9;
   /** RegularExpression Id. */
-  int IRIref = 10;
+  int PNAME_NS = 10;
   /** RegularExpression Id. */
-  int PNAME_NS = 11;
+  int PNAME_LN = 11;
   /** RegularExpression Id. */
-  int PNAME_LN = 12;
+  int BLANK_NODE_LABEL = 12;
   /** RegularExpression Id. */
-  int BLANK_NODE_LABEL = 13;
+  int VAR1 = 13;
   /** RegularExpression Id. */
-  int VAR1 = 14;
+  int VAR2 = 14;
   /** RegularExpression Id. */
-  int VAR2 = 15;
+  int LANGTAG = 15;
   /** RegularExpression Id. */
-  int LANGTAG = 16;
+  int A2Z = 16;
   /** RegularExpression Id. */
-  int A2Z = 17;
+  int A2ZN = 17;
   /** RegularExpression Id. */
-  int A2ZN = 18;
+  int KW_A = 18;
   /** RegularExpression Id. */
-  int KW_A = 19;
+  int BASE = 19;
   /** RegularExpression Id. */
-  int BASE = 20;
+  int PREFIX = 20;
   /** RegularExpression Id. */
-  int PREFIX = 21;
+  int SELECT = 21;
   /** RegularExpression Id. */
-  int SELECT = 22;
+  int DISTINCT = 22;
   /** RegularExpression Id. */
-  int DISTINCT = 23;
+  int REDUCED = 23;
   /** RegularExpression Id. */
-  int REDUCED = 24;
+  int DESCRIBE = 24;
   /** RegularExpression Id. */
-  int DESCRIBE = 25;
+  int CONSTRUCT = 25;
   /** RegularExpression Id. */
-  int CONSTRUCT = 26;
+  int ASK = 26;
   /** RegularExpression Id. */
-  int ASK = 27;
+  int LIMIT = 27;
   /** RegularExpression Id. */
-  int LIMIT = 28;
+  int OFFSET = 28;
   /** RegularExpression Id. */
-  int OFFSET = 29;
+  int ORDER = 29;
   /** RegularExpression Id. */
-  int ORDER = 30;
+  int BY = 30;
   /** RegularExpression Id. */
-  int BY = 31;
+  int VALUES = 31;
   /** RegularExpression Id. */
-  int VALUES = 32;
+  int UNDEF = 32;
   /** RegularExpression Id. */
-  int UNDEF = 33;
+  int ASC = 33;
   /** RegularExpression Id. */
-  int ASC = 34;
+  int DESC = 34;
   /** RegularExpression Id. */
-  int DESC = 35;
+  int NAMED = 35;
   /** RegularExpression Id. */
-  int NAMED = 36;
+  int FROM = 36;
   /** RegularExpression Id. */
-  int FROM = 37;
+  int WHERE = 37;
   /** RegularExpression Id. */
-  int WHERE = 38;
+  int AND = 38;
   /** RegularExpression Id. */
-  int AND = 39;
+  int GRAPH = 39;
   /** RegularExpression Id. */
-  int GRAPH = 40;
+  int OPTIONAL = 40;
   /** RegularExpression Id. */
-  int OPTIONAL = 41;
+  int UNION = 41;
   /** RegularExpression Id. */
-  int UNION = 42;
+  int MINUS_P = 42;
   /** RegularExpression Id. */
-  int MINUS_P = 43;
+  int BIND = 43;
   /** RegularExpression Id. */
-  int BIND = 44;
+  int SERVICE = 44;
   /** RegularExpression Id. */
-  int SERVICE = 45;
+  int TRIPLE = 45;
   /** RegularExpression Id. */
-  int EXISTS = 46;
+  int IS_TRIPLE = 46;
   /** RegularExpression Id. */
-  int NOT = 47;
+  int SUBJECT = 47;
   /** RegularExpression Id. */
-  int AS = 48;
+  int PREDICATE = 48;
   /** RegularExpression Id. */
-  int GROUP = 49;
+  int OBJECT = 49;
   /** RegularExpression Id. */
-  int HAVING = 50;
+  int EXISTS = 50;
   /** RegularExpression Id. */
-  int SEPARATOR = 51;
+  int NOT = 51;
   /** RegularExpression Id. */
-  int AGG = 52;
+  int AS = 52;
   /** RegularExpression Id. */
-  int COUNT = 53;
+  int GROUP = 53;
   /** RegularExpression Id. */
-  int MIN = 54;
+  int HAVING = 54;
   /** RegularExpression Id. */
-  int MAX = 55;
+  int SEPARATOR = 55;
   /** RegularExpression Id. */
-  int SUM = 56;
+  int AGG = 56;
   /** RegularExpression Id. */
-  int AVG = 57;
+  int COUNT = 57;
   /** RegularExpression Id. */
-  int STDEV = 58;
+  int MIN = 58;
   /** RegularExpression Id. */
-  int STDEV_SAMP = 59;
+  int MAX = 59;
   /** RegularExpression Id. */
-  int STDEV_POP = 60;
+  int SUM = 60;
   /** RegularExpression Id. */
-  int VARIANCE = 61;
+  int AVG = 61;
   /** RegularExpression Id. */
-  int VAR_SAMP = 62;
+  int STDEV = 62;
   /** RegularExpression Id. */
-  int VAR_POP = 63;
+  int STDEV_SAMP = 63;
   /** RegularExpression Id. */
-  int SAMPLE = 64;
+  int STDEV_POP = 64;
   /** RegularExpression Id. */
-  int GROUP_CONCAT = 65;
+  int VARIANCE = 65;
   /** RegularExpression Id. */
-  int FILTER = 66;
+  int VAR_SAMP = 66;
   /** RegularExpression Id. */
-  int BOUND = 67;
+  int VAR_POP = 67;
   /** RegularExpression Id. */
-  int COALESCE = 68;
+  int SAMPLE = 68;
   /** RegularExpression Id. */
-  int IN = 69;
+  int GROUP_CONCAT = 69;
   /** RegularExpression Id. */
-  int IF = 70;
+  int FILTER = 70;
   /** RegularExpression Id. */
-  int BNODE = 71;
+  int BOUND = 71;
   /** RegularExpression Id. */
-  int IRI = 72;
+  int COALESCE = 72;
   /** RegularExpression Id. */
-  int URI = 73;
+  int IN = 73;
   /** RegularExpression Id. */
-  int STR = 74;
+  int IF = 74;
   /** RegularExpression Id. */
-  int STRLANG = 75;
+  int BNODE = 75;
   /** RegularExpression Id. */
-  int STRDT = 76;
+  int IRI = 76;
   /** RegularExpression Id. */
-  int DTYPE = 77;
+  int URI = 77;
   /** RegularExpression Id. */
-  int LANG = 78;
+  int STR = 78;
   /** RegularExpression Id. */
-  int LANGMATCHES = 79;
+  int STRLANG = 79;
   /** RegularExpression Id. */
-  int IS_URI = 80;
+  int STRDT = 80;
   /** RegularExpression Id. */
-  int IS_IRI = 81;
+  int DTYPE = 81;
   /** RegularExpression Id. */
-  int IS_BLANK = 82;
+  int LANG = 82;
   /** RegularExpression Id. */
-  int IS_LITERAL = 83;
+  int LANGMATCHES = 83;
   /** RegularExpression Id. */
-  int IS_NUMERIC = 84;
+  int IS_URI = 84;
   /** RegularExpression Id. */
-  int REGEX = 85;
+  int IS_IRI = 85;
   /** RegularExpression Id. */
-  int SAME_TERM = 86;
+  int IS_BLANK = 86;
   /** RegularExpression Id. */
-  int RAND = 87;
+  int IS_LITERAL = 87;
   /** RegularExpression Id. */
-  int ABS = 88;
+  int IS_NUMERIC = 88;
   /** RegularExpression Id. */
-  int CEIL = 89;
+  int REGEX = 89;
   /** RegularExpression Id. */
-  int FLOOR = 90;
+  int SAME_TERM = 90;
   /** RegularExpression Id. */
-  int ROUND = 91;
+  int RAND = 91;
   /** RegularExpression Id. */
-  int CONCAT = 92;
+  int ABS = 92;
   /** RegularExpression Id. */
-  int SUBSTR = 93;
+  int CEIL = 93;
   /** RegularExpression Id. */
-  int STRLEN = 94;
+  int FLOOR = 94;
   /** RegularExpression Id. */
-  int REPLACE = 95;
+  int ROUND = 95;
   /** RegularExpression Id. */
-  int UCASE = 96;
+  int CONCAT = 96;
   /** RegularExpression Id. */
-  int LCASE = 97;
+  int SUBSTR = 97;
   /** RegularExpression Id. */
-  int ENCODE_FOR_URI = 98;
+  int STRLEN = 98;
   /** RegularExpression Id. */
-  int CONTAINS = 99;
+  int REPLACE = 99;
   /** RegularExpression Id. */
-  int STRSTARTS = 100;
+  int UCASE = 100;
   /** RegularExpression Id. */
-  int STRENDS = 101;
+  int LCASE = 101;
   /** RegularExpression Id. */
-  int STRBEFORE = 102;
+  int ENCODE_FOR_URI = 102;
   /** RegularExpression Id. */
-  int STRAFTER = 103;
+  int CONTAINS = 103;
   /** RegularExpression Id. */
-  int YEAR = 104;
+  int STRSTARTS = 104;
   /** RegularExpression Id. */
-  int MONTH = 105;
+  int STRENDS = 105;
+  /** RegularExpression Id. */
+  int STRBEFORE = 106;
+  /** RegularExpression Id. */
+  int STRAFTER = 107;
+  /** RegularExpression Id. */
+  int YEAR = 108;
+  /** RegularExpression Id. */
+  int MONTH = 109;
+  /** RegularExpression Id. */
+  int DAY = 110;
+  /** RegularExpression Id. */
+  int HOURS = 111;
+  /** RegularExpression Id. */
+  int MINUTES = 112;
+  /** RegularExpression Id. */
+  int SECONDS = 113;
   /** RegularExpression Id. */
-  int DAY = 106;
+  int TIMEZONE = 114;
   /** RegularExpression Id. */
-  int HOURS = 107;
+  int TZ = 115;
   /** RegularExpression Id. */
-  int MINUTES = 108;
+  int NOW = 116;
   /** RegularExpression Id. */
-  int SECONDS = 109;
+  int UUID = 117;
   /** RegularExpression Id. */
-  int TIMEZONE = 110;
+  int STRUUID = 118;
   /** RegularExpression Id. */
-  int TZ = 111;
+  int MD5 = 119;
   /** RegularExpression Id. */
-  int NOW = 112;
+  int SHA1 = 120;
   /** RegularExpression Id. */
-  int UUID = 113;
+  int SHA224 = 121;
   /** RegularExpression Id. */
-  int STRUUID = 114;
+  int SHA256 = 122;
   /** RegularExpression Id. */
-  int MD5 = 115;
+  int SHA384 = 123;
   /** RegularExpression Id. */
-  int SHA1 = 116;
+  int SHA512 = 124;
   /** RegularExpression Id. */
-  int SHA224 = 117;
+  int TRUE = 125;
   /** RegularExpression Id. */
-  int SHA256 = 118;
+  int FALSE = 126;
   /** RegularExpression Id. */
-  int SHA384 = 119;
+  int DATA = 127;
   /** RegularExpression Id. */
-  int SHA512 = 120;
+  int INSERT = 128;
   /** RegularExpression Id. */
-  int TRUE = 121;
+  int DELETE = 129;
   /** RegularExpression Id. */
-  int FALSE = 122;
+  int INSERT_DATA = 130;
   /** RegularExpression Id. */
-  int DATA = 123;
+  int DELETE_DATA = 131;
   /** RegularExpression Id. */
-  int INSERT = 124;
+  int DELETE_WHERE = 132;
   /** RegularExpression Id. */
-  int DELETE = 125;
+  int LOAD = 133;
   /** RegularExpression Id. */
-  int INSERT_DATA = 126;
+  int CLEAR = 134;
   /** RegularExpression Id. */
-  int DELETE_DATA = 127;
+  int CREATE = 135;
   /** RegularExpression Id. */
-  int DELETE_WHERE = 128;
+  int ADD = 136;
   /** RegularExpression Id. */
-  int LOAD = 129;
+  int MOVE = 137;
   /** RegularExpression Id. */
-  int CLEAR = 130;
+  int COPY = 138;
   /** RegularExpression Id. */
-  int CREATE = 131;
+  int META = 139;
   /** RegularExpression Id. */
-  int ADD = 132;
+  int SILENT = 140;
   /** RegularExpression Id. */
-  int MOVE = 133;
+  int DROP = 141;
   /** RegularExpression Id. */
-  int COPY = 134;
+  int INTO = 142;
   /** RegularExpression Id. */
-  int META = 135;
+  int TO = 143;
   /** RegularExpression Id. */
-  int SILENT = 136;
+  int DFT = 144;
   /** RegularExpression Id. */
-  int DROP = 137;
+  int ALL = 145;
   /** RegularExpression Id. */
-  int INTO = 138;
+  int WITH = 146;
   /** RegularExpression Id. */
-  int TO = 139;
+  int USING = 147;
   /** RegularExpression Id. */
-  int DFT = 140;
+  int DIGITS = 148;
   /** RegularExpression Id. */
-  int ALL = 141;
+  int INTEGER = 149;
   /** RegularExpression Id. */
-  int WITH = 142;
+  int DECIMAL = 150;
   /** RegularExpression Id. */
-  int USING = 143;
+  int DOUBLE = 151;
   /** RegularExpression Id. */
-  int DIGITS = 144;
+  int INTEGER_POSITIVE = 152;
   /** RegularExpression Id. */
-  int INTEGER = 145;
+  int DECIMAL_POSITIVE = 153;
   /** RegularExpression Id. */
-  int DECIMAL = 146;
+  int DOUBLE_POSITIVE = 154;
   /** RegularExpression Id. */
-  int DOUBLE = 147;
+  int INTEGER_NEGATIVE = 155;
   /** RegularExpression Id. */
-  int INTEGER_POSITIVE = 148;
+  int DECIMAL_NEGATIVE = 156;
   /** RegularExpression Id. */
-  int DECIMAL_POSITIVE = 149;
+  int DOUBLE_NEGATIVE = 157;
   /** RegularExpression Id. */
-  int DOUBLE_POSITIVE = 150;
+  int EXPONENT = 158;
   /** RegularExpression Id. */
-  int INTEGER_NEGATIVE = 151;
+  int QUOTE_3D = 159;
   /** RegularExpression Id. */
-  int DECIMAL_NEGATIVE = 152;
+  int QUOTE_3S = 160;
   /** RegularExpression Id. */
-  int DOUBLE_NEGATIVE = 153;
+  int ECHAR = 161;
   /** RegularExpression Id. */
-  int EXPONENT = 154;
+  int UCHAR = 162;
   /** RegularExpression Id. */
-  int QUOTE_3D = 155;
+  int UCHAR4 = 163;
   /** RegularExpression Id. */
-  int QUOTE_3S = 156;
+  int UCHAR8 = 164;
   /** RegularExpression Id. */
-  int ECHAR = 157;
+  int STRING_LITERAL1 = 165;
   /** RegularExpression Id. */
-  int UCHAR = 158;
+  int STRING_LITERAL2 = 166;
   /** RegularExpression Id. */
-  int UCHAR4 = 159;
+  int STRING_LITERAL_LONG1 = 167;
   /** RegularExpression Id. */
-  int UCHAR8 = 160;
+  int STRING_LITERAL_LONG2 = 168;
   /** RegularExpression Id. */
-  int STRING_LITERAL1 = 161;
+  int LPAREN = 169;
   /** RegularExpression Id. */
-  int STRING_LITERAL2 = 162;
+  int RPAREN = 170;
   /** RegularExpression Id. */
-  int STRING_LITERAL_LONG1 = 163;
+  int NIL = 171;
   /** RegularExpression Id. */
-  int STRING_LITERAL_LONG2 = 164;
+  int LBRACE = 172;
   /** RegularExpression Id. */
-  int LPAREN = 165;
+  int RBRACE = 173;
   /** RegularExpression Id. */
-  int RPAREN = 166;
+  int LBRACKET = 174;
   /** RegularExpression Id. */
-  int NIL = 167;
+  int RBRACKET = 175;
   /** RegularExpression Id. */
-  int LBRACE = 168;
+  int ANON = 176;
   /** RegularExpression Id. */
-  int RBRACE = 169;
+  int SEMICOLON = 177;
   /** RegularExpression Id. */
-  int LBRACKET = 170;
+  int COMMA = 178;
   /** RegularExpression Id. */
-  int RBRACKET = 171;
+  int DOT = 179;
   /** RegularExpression Id. */
-  int ANON = 172;
+  int EQ = 180;
   /** RegularExpression Id. */
-  int SEMICOLON = 173;
+  int NE = 181;
   /** RegularExpression Id. */
-  int COMMA = 174;
+  int GT = 182;
   /** RegularExpression Id. */
-  int DOT = 175;
+  int LT = 183;
   /** RegularExpression Id. */
-  int EQ = 176;
+  int LE = 184;
   /** RegularExpression Id. */
-  int NE = 177;
+  int GE = 185;
   /** RegularExpression Id. */
-  int GT = 178;
+  int GT2 = 186;
   /** RegularExpression Id. */
-  int LT = 179;
+  int LT2 = 187;
   /** RegularExpression Id. */
-  int LE = 180;
+  int L_ANN = 188;
   /** RegularExpression Id. */
-  int GE = 181;
+  int R_ANN = 189;
   /** RegularExpression Id. */
-  int BANG = 182;
+  int BANG = 190;
   /** RegularExpression Id. */
-  int TILDE = 183;
+  int TILDE = 191;
   /** RegularExpression Id. */
-  int COLON = 184;
+  int COLON = 192;
   /** RegularExpression Id. */
-  int SC_OR = 185;
+  int SC_OR = 193;
   /** RegularExpression Id. */
-  int SC_AND = 186;
+  int SC_AND = 194;
   /** RegularExpression Id. */
-  int PLUS = 187;
+  int PLUS = 195;
   /** RegularExpression Id. */
-  int MINUS = 188;
+  int MINUS = 196;
   /** RegularExpression Id. */
-  int STAR = 189;
+  int STAR = 197;
   /** RegularExpression Id. */
-  int SLASH = 190;
+  int SLASH = 198;
   /** RegularExpression Id. */
-  int DATATYPE = 191;
+  int DATATYPE = 199;
   /** RegularExpression Id. */
-  int AT = 192;
+  int AT = 200;
   /** RegularExpression Id. */
-  int VBAR = 193;
+  int VBAR = 201;
   /** RegularExpression Id. */
-  int CARAT = 194;
+  int CARAT = 202;
   /** RegularExpression Id. */
-  int FPATH = 195;
+  int FPATH = 203;
   /** RegularExpression Id. */
-  int RPATH = 196;
+  int RPATH = 204;
   /** RegularExpression Id. */
-  int QMARK = 197;
+  int QMARK = 205;
   /** RegularExpression Id. */
-  int PN_CHARS_BASE = 198;
+  int PN_CHARS_BASE = 206;
   /** RegularExpression Id. */
-  int PN_CHARS_U = 199;
+  int PN_CHARS_U = 207;
   /** RegularExpression Id. */
-  int PN_CHARS = 200;
+  int PN_CHARS = 208;
   /** RegularExpression Id. */
-  int PN_PREFIX = 201;
+  int PN_PREFIX = 209;
   /** RegularExpression Id. */
-  int PN_LOCAL = 202;
+  int PN_LOCAL = 210;
   /** RegularExpression Id. */
-  int VARNAME = 203;
+  int VARNAME = 211;
   /** RegularExpression Id. */
-  int PN_LOCAL_ESC = 204;
+  int PN_LOCAL_ESC = 212;
   /** RegularExpression Id. */
-  int PLX = 205;
+  int PLX = 213;
   /** RegularExpression Id. */
-  int HEX = 206;
+  int HEX = 214;
   /** RegularExpression Id. */
-  int PERCENT = 207;
+  int PERCENT = 215;
   /** RegularExpression Id. */
-  int UNKNOWN = 208;
+  int UNKNOWN = 216;
 
   /** Lexical state. */
   int DEFAULT = 0;
@@ -431,7 +447,6 @@
     "<SINGLE_LINE_COMMENT>",
     "<WS>",
     "<WSC>",
-    "\"\\ufeff\"",
     "<IRIref>",
     "<PNAME_NS>",
     "<PNAME_LN>",
@@ -468,6 +483,11 @@
     "\"minus\"",
     "\"bind\"",
     "\"service\"",
+    "\"TRIPLE\"",
+    "\"isTRIPLE\"",
+    "\"SUBJECT\"",
+    "\"PREDICATE\"",
+    "\"OBJECT\"",
     "\"exists\"",
     "\"not\"",
     "\"as\"",
@@ -604,6 +624,10 @@
     "\"<\"",
     "\"<=\"",
     "\">=\"",
+    "\">>\"",
+    "\"<<\"",
+    "\"{|\"",
+    "\"|}\"",
     "\"!\"",
     "\"~\"",
     "\":\"",
diff --git a/jena-arq/src/main/java/org/apache/jena/sparql/lang/sparql_12/SPARQLParser12TokenManager.java b/jena-arq/src/main/java/org/apache/jena/sparql/lang/sparql_12/SPARQLParser12TokenManager.java
index 72c48ac..bc22366 100644
--- a/jena-arq/src/main/java/org/apache/jena/sparql/lang/sparql_12/SPARQLParser12TokenManager.java
+++ b/jena-arq/src/main/java/org/apache/jena/sparql/lang/sparql_12/SPARQLParser12TokenManager.java
@@ -45,163 +45,160 @@
          jjmatchedKind = 1;
          return jjMoveNfa_0(0, 0);
       case 33:
-         jjmatchedKind = 182;
-         return jjMoveStringLiteralDfa1_0(0x0L, 0x0L, 0x2000000000000L, 0x0L);
-      case 38:
-         return jjMoveStringLiteralDfa1_0(0x0L, 0x0L, 0x400000000000000L, 0x0L);
-      case 40:
-         jjmatchedKind = 165;
-         return jjMoveNfa_0(0, 0);
-      case 41:
-         jjmatchedKind = 166;
-         return jjMoveNfa_0(0, 0);
-      case 42:
-         jjmatchedKind = 189;
-         return jjMoveNfa_0(0, 0);
-      case 43:
-         jjmatchedKind = 187;
-         return jjMoveNfa_0(0, 0);
-      case 44:
-         jjmatchedKind = 174;
-         return jjMoveNfa_0(0, 0);
-      case 45:
-         jjmatchedKind = 188;
-         return jjMoveStringLiteralDfa1_0(0x0L, 0x0L, 0x0L, 0x8L);
-      case 46:
-         jjmatchedKind = 175;
-         return jjMoveNfa_0(0, 0);
-      case 47:
          jjmatchedKind = 190;
-         return jjMoveNfa_0(0, 0);
-      case 58:
-         jjmatchedKind = 184;
-         return jjMoveNfa_0(0, 0);
-      case 59:
-         jjmatchedKind = 173;
-         return jjMoveNfa_0(0, 0);
-      case 60:
-         jjmatchedKind = 179;
-         return jjMoveStringLiteralDfa1_0(0x0L, 0x0L, 0x10000000000000L, 0x10L);
-      case 61:
-         jjmatchedKind = 176;
-         return jjMoveNfa_0(0, 0);
-      case 62:
-         jjmatchedKind = 178;
          return jjMoveStringLiteralDfa1_0(0x0L, 0x0L, 0x20000000000000L, 0x0L);
-      case 63:
-         jjmatchedKind = 197;
-         return jjMoveNfa_0(0, 0);
-      case 64:
-         jjmatchedKind = 192;
-         return jjMoveNfa_0(0, 0);
-      case 65:
-         return jjMoveStringLiteralDfa1_0(0x211008408000000L, 0x1000000L, 0x2010L, 0x0L);
-      case 66:
-         return jjMoveStringLiteralDfa1_0(0x100080100000L, 0x88L, 0x0L, 0x0L);
-      case 67:
-         return jjMoveStringLiteralDfa1_0(0x20000004000000L, 0x812000010L, 0x4cL, 0x0L);
-      case 68:
-         return jjMoveStringLiteralDfa1_0(0x802800000L, 0x2800040000002000L, 0x1200L, 0x0L);
-      case 69:
-         return jjMoveStringLiteralDfa1_0(0x400000000000L, 0x400000000L, 0x0L, 0x0L);
-      case 70:
-         return jjMoveStringLiteralDfa1_0(0x2000000000L, 0x400000004000004L, 0x0L, 0x0L);
-      case 71:
-         return jjMoveStringLiteralDfa1_0(0x2010000000000L, 0x2L, 0x0L, 0x0L);
-      case 72:
-         return jjMoveStringLiteralDfa1_0(0x4000000000000L, 0x80000000000L, 0x0L, 0x0L);
-      case 73:
-         return jjMoveStringLiteralDfa1_0(0x0L, 0x10000000001f0160L, 0x400L, 0x0L);
-      case 76:
-         return jjMoveStringLiteralDfa1_0(0x10000000L, 0x20000c000L, 0x2L, 0x0L);
-      case 77:
-         return jjMoveStringLiteralDfa1_0(0xc0080000000000L, 0x8120000000000L, 0xa0L, 0x0L);
-      case 78:
-         return jjMoveStringLiteralDfa1_0(0x801000000000L, 0x1000000000000L, 0x0L, 0x0L);
-      case 79:
-         return jjMoveStringLiteralDfa1_0(0x20060000000L, 0x0L, 0x0L, 0x0L);
-      case 80:
-         return jjMoveStringLiteralDfa1_0(0x200000L, 0x0L, 0x0L, 0x0L);
-      case 82:
-         return jjMoveStringLiteralDfa1_0(0x1000000L, 0x88a00000L, 0x0L, 0x0L);
-      case 83:
-         return jjMoveStringLiteralDfa1_0(0x1d08200000400000L, 0x1f420f060401c01L, 0x100L, 0x0L);
-      case 84:
-         return jjMoveStringLiteralDfa1_0(0x0L, 0x200c00000000000L, 0x800L, 0x0L);
-      case 85:
-         return jjMoveStringLiteralDfa1_0(0x40200000000L, 0x2000100000200L, 0x8000L, 0x0L);
-      case 86:
-         return jjMoveStringLiteralDfa1_0(0xe000000100000000L, 0x0L, 0x0L, 0x0L);
-      case 87:
-         return jjMoveStringLiteralDfa1_0(0x4000000000L, 0x0L, 0x4000L, 0x0L);
-      case 89:
-         return jjMoveStringLiteralDfa1_0(0x0L, 0x10000000000L, 0x0L, 0x0L);
-      case 91:
-         jjmatchedKind = 170;
-         return jjMoveNfa_0(0, 0);
-      case 93:
-         jjmatchedKind = 171;
-         return jjMoveNfa_0(0, 0);
-      case 94:
-         jjmatchedKind = 194;
-         return jjMoveStringLiteralDfa1_0(0x0L, 0x0L, 0x8000000000000000L, 0x0L);
-      case 97:
-         jjmatchedKind = 19;
-         return jjMoveStringLiteralDfa1_0(0x211008408000000L, 0x1000000L, 0x2010L, 0x0L);
-      case 98:
-         return jjMoveStringLiteralDfa1_0(0x100080100000L, 0x88L, 0x0L, 0x0L);
-      case 99:
-         return jjMoveStringLiteralDfa1_0(0x20000004000000L, 0x812000010L, 0x4cL, 0x0L);
-      case 100:
-         return jjMoveStringLiteralDfa1_0(0x802800000L, 0x2800040000002000L, 0x1200L, 0x0L);
-      case 101:
-         return jjMoveStringLiteralDfa1_0(0x400000000000L, 0x400000000L, 0x0L, 0x0L);
-      case 102:
-         return jjMoveStringLiteralDfa1_0(0x2000000000L, 0x400000004000004L, 0x0L, 0x0L);
-      case 103:
-         return jjMoveStringLiteralDfa1_0(0x2010000000000L, 0x2L, 0x0L, 0x0L);
-      case 104:
-         return jjMoveStringLiteralDfa1_0(0x4000000000000L, 0x80000000000L, 0x0L, 0x0L);
-      case 105:
-         return jjMoveStringLiteralDfa1_0(0x0L, 0x10000000001f0160L, 0x400L, 0x0L);
-      case 108:
-         return jjMoveStringLiteralDfa1_0(0x10000000L, 0x20000c000L, 0x2L, 0x0L);
-      case 109:
-         return jjMoveStringLiteralDfa1_0(0xc0080000000000L, 0x8120000000000L, 0xa0L, 0x0L);
-      case 110:
-         return jjMoveStringLiteralDfa1_0(0x801000000000L, 0x1000000000000L, 0x0L, 0x0L);
-      case 111:
-         return jjMoveStringLiteralDfa1_0(0x20060000000L, 0x0L, 0x0L, 0x0L);
-      case 112:
-         return jjMoveStringLiteralDfa1_0(0x200000L, 0x0L, 0x0L, 0x0L);
-      case 114:
-         return jjMoveStringLiteralDfa1_0(0x1000000L, 0x88a00000L, 0x0L, 0x0L);
-      case 115:
-         return jjMoveStringLiteralDfa1_0(0x1d08200000400000L, 0x1f420f060401c01L, 0x100L, 0x0L);
-      case 116:
-         return jjMoveStringLiteralDfa1_0(0x0L, 0x200c00000000000L, 0x800L, 0x0L);
-      case 117:
-         return jjMoveStringLiteralDfa1_0(0x40200000000L, 0x2000100000200L, 0x8000L, 0x0L);
-      case 118:
-         return jjMoveStringLiteralDfa1_0(0xe000000100000000L, 0x0L, 0x0L, 0x0L);
-      case 119:
-         return jjMoveStringLiteralDfa1_0(0x4000000000L, 0x0L, 0x4000L, 0x0L);
-      case 121:
-         return jjMoveStringLiteralDfa1_0(0x0L, 0x10000000000L, 0x0L, 0x0L);
-      case 123:
-         jjmatchedKind = 168;
-         return jjMoveNfa_0(0, 0);
-      case 124:
-         jjmatchedKind = 193;
-         return jjMoveStringLiteralDfa1_0(0x0L, 0x0L, 0x200000000000000L, 0x0L);
-      case 125:
+      case 38:
+         return jjMoveStringLiteralDfa1_0(0x0L, 0x0L, 0x0L, 0x4L);
+      case 40:
          jjmatchedKind = 169;
          return jjMoveNfa_0(0, 0);
-      case 126:
-         jjmatchedKind = 183;
+      case 41:
+         jjmatchedKind = 170;
          return jjMoveNfa_0(0, 0);
-      case 65279:
-         jjmatchedKind = 9;
+      case 42:
+         jjmatchedKind = 197;
+         return jjMoveNfa_0(0, 0);
+      case 43:
+         jjmatchedKind = 195;
+         return jjMoveNfa_0(0, 0);
+      case 44:
+         jjmatchedKind = 178;
+         return jjMoveNfa_0(0, 0);
+      case 45:
+         jjmatchedKind = 196;
+         return jjMoveStringLiteralDfa1_0(0x0L, 0x0L, 0x0L, 0x800L);
+      case 46:
+         jjmatchedKind = 179;
+         return jjMoveNfa_0(0, 0);
+      case 47:
+         jjmatchedKind = 198;
+         return jjMoveNfa_0(0, 0);
+      case 58:
+         jjmatchedKind = 192;
+         return jjMoveNfa_0(0, 0);
+      case 59:
+         jjmatchedKind = 177;
+         return jjMoveNfa_0(0, 0);
+      case 60:
+         jjmatchedKind = 183;
+         return jjMoveStringLiteralDfa1_0(0x0L, 0x0L, 0x900000000000000L, 0x1000L);
+      case 61:
+         jjmatchedKind = 180;
+         return jjMoveNfa_0(0, 0);
+      case 62:
+         jjmatchedKind = 182;
+         return jjMoveStringLiteralDfa1_0(0x0L, 0x0L, 0x600000000000000L, 0x0L);
+      case 63:
+         jjmatchedKind = 205;
+         return jjMoveNfa_0(0, 0);
+      case 64:
+         jjmatchedKind = 200;
+         return jjMoveNfa_0(0, 0);
+      case 65:
+         return jjMoveStringLiteralDfa1_0(0x2110004204000000L, 0x10000000L, 0x20100L, 0x0L);
+      case 66:
+         return jjMoveStringLiteralDfa1_0(0x80040080000L, 0x880L, 0x0L, 0x0L);
+      case 67:
+         return jjMoveStringLiteralDfa1_0(0x200000002000000L, 0x8120000100L, 0x4c0L, 0x0L);
+      case 68:
+         return jjMoveStringLiteralDfa1_0(0x401400000L, 0x8000400000020000L, 0x12002L, 0x0L);
+      case 69:
+         return jjMoveStringLiteralDfa1_0(0x4000000000000L, 0x4000000000L, 0x0L, 0x0L);
+      case 70:
+         return jjMoveStringLiteralDfa1_0(0x1000000000L, 0x4000000040000040L, 0x0L, 0x0L);
+      case 71:
+         return jjMoveStringLiteralDfa1_0(0x20008000000000L, 0x20L, 0x0L, 0x0L);
+      case 72:
+         return jjMoveStringLiteralDfa1_0(0x40000000000000L, 0x800000000000L, 0x0L, 0x0L);
+      case 73:
+         return jjMoveStringLiteralDfa1_0(0x400000000000L, 0x1f01600L, 0x4001L, 0x0L);
+      case 76:
+         return jjMoveStringLiteralDfa1_0(0x8000000L, 0x20000c0000L, 0x20L, 0x0L);
+      case 77:
+         return jjMoveStringLiteralDfa1_0(0xc00040000000000L, 0x81200000000000L, 0xa00L, 0x0L);
+      case 78:
+         return jjMoveStringLiteralDfa1_0(0x8000800000000L, 0x10000000000000L, 0x0L, 0x0L);
+      case 79:
+         return jjMoveStringLiteralDfa1_0(0x2010030000000L, 0x0L, 0x0L, 0x0L);
+      case 80:
+         return jjMoveStringLiteralDfa1_0(0x1000000100000L, 0x0L, 0x0L, 0x0L);
+      case 82:
+         return jjMoveStringLiteralDfa1_0(0x800000L, 0x88a000000L, 0x0L, 0x0L);
+      case 83:
+         return jjMoveStringLiteralDfa1_0(0xd080900000200000L, 0x1f420f060401c011L, 0x1000L, 0x0L);
+      case 84:
+         return jjMoveStringLiteralDfa1_0(0x200000000000L, 0x200c000000000000L, 0x8000L, 0x0L);
+      case 85:
+         return jjMoveStringLiteralDfa1_0(0x20100000000L, 0x20001000002000L, 0x80000L, 0x0L);
+      case 86:
+         return jjMoveStringLiteralDfa1_0(0x80000000L, 0xeL, 0x0L, 0x0L);
+      case 87:
+         return jjMoveStringLiteralDfa1_0(0x2000000000L, 0x0L, 0x40000L, 0x0L);
+      case 89:
+         return jjMoveStringLiteralDfa1_0(0x0L, 0x100000000000L, 0x0L, 0x0L);
+      case 91:
+         jjmatchedKind = 174;
+         return jjMoveNfa_0(0, 0);
+      case 93:
+         jjmatchedKind = 175;
+         return jjMoveNfa_0(0, 0);
+      case 94:
+         jjmatchedKind = 202;
+         return jjMoveStringLiteralDfa1_0(0x0L, 0x0L, 0x0L, 0x80L);
+      case 97:
+         jjmatchedKind = 18;
+         return jjMoveStringLiteralDfa1_0(0x2110004204000000L, 0x10000000L, 0x20100L, 0x0L);
+      case 98:
+         return jjMoveStringLiteralDfa1_0(0x80040080000L, 0x880L, 0x0L, 0x0L);
+      case 99:
+         return jjMoveStringLiteralDfa1_0(0x200000002000000L, 0x8120000100L, 0x4c0L, 0x0L);
+      case 100:
+         return jjMoveStringLiteralDfa1_0(0x401400000L, 0x8000400000020000L, 0x12002L, 0x0L);
+      case 101:
+         return jjMoveStringLiteralDfa1_0(0x4000000000000L, 0x4000000000L, 0x0L, 0x0L);
+      case 102:
+         return jjMoveStringLiteralDfa1_0(0x1000000000L, 0x4000000040000040L, 0x0L, 0x0L);
+      case 103:
+         return jjMoveStringLiteralDfa1_0(0x20008000000000L, 0x20L, 0x0L, 0x0L);
+      case 104:
+         return jjMoveStringLiteralDfa1_0(0x40000000000000L, 0x800000000000L, 0x0L, 0x0L);
+      case 105:
+         return jjMoveStringLiteralDfa1_0(0x400000000000L, 0x1f01600L, 0x4001L, 0x0L);
+      case 108:
+         return jjMoveStringLiteralDfa1_0(0x8000000L, 0x20000c0000L, 0x20L, 0x0L);
+      case 109:
+         return jjMoveStringLiteralDfa1_0(0xc00040000000000L, 0x81200000000000L, 0xa00L, 0x0L);
+      case 110:
+         return jjMoveStringLiteralDfa1_0(0x8000800000000L, 0x10000000000000L, 0x0L, 0x0L);
+      case 111:
+         return jjMoveStringLiteralDfa1_0(0x2010030000000L, 0x0L, 0x0L, 0x0L);
+      case 112:
+         return jjMoveStringLiteralDfa1_0(0x1000000100000L, 0x0L, 0x0L, 0x0L);
+      case 114:
+         return jjMoveStringLiteralDfa1_0(0x800000L, 0x88a000000L, 0x0L, 0x0L);
+      case 115:
+         return jjMoveStringLiteralDfa1_0(0xd080900000200000L, 0x1f420f060401c011L, 0x1000L, 0x0L);
+      case 116:
+         return jjMoveStringLiteralDfa1_0(0x200000000000L, 0x200c000000000000L, 0x8000L, 0x0L);
+      case 117:
+         return jjMoveStringLiteralDfa1_0(0x20100000000L, 0x20001000002000L, 0x80000L, 0x0L);
+      case 118:
+         return jjMoveStringLiteralDfa1_0(0x80000000L, 0xeL, 0x0L, 0x0L);
+      case 119:
+         return jjMoveStringLiteralDfa1_0(0x2000000000L, 0x0L, 0x40000L, 0x0L);
+      case 121:
+         return jjMoveStringLiteralDfa1_0(0x0L, 0x100000000000L, 0x0L, 0x0L);
+      case 123:
+         jjmatchedKind = 172;
+         return jjMoveStringLiteralDfa1_0(0x0L, 0x0L, 0x1000000000000000L, 0x0L);
+      case 124:
+         jjmatchedKind = 201;
+         return jjMoveStringLiteralDfa1_0(0x0L, 0x0L, 0x2000000000000000L, 0x2L);
+      case 125:
+         jjmatchedKind = 173;
+         return jjMoveNfa_0(0, 0);
+      case 126:
+         jjmatchedKind = 191;
          return jjMoveNfa_0(0, 0);
       default :
          return jjMoveNfa_0(0, 0);
@@ -215,198 +212,222 @@
    switch(curChar)
    {
       case 38:
+         if ((active3 & 0x4L) != 0L)
+         {
+            jjmatchedKind = 194;
+            jjmatchedPos = 1;
+         }
+         break;
+      case 45:
+         if ((active3 & 0x1000L) != 0L)
+         {
+            jjmatchedKind = 204;
+            jjmatchedPos = 1;
+         }
+         break;
+      case 60:
+         if ((active2 & 0x800000000000000L) != 0L)
+         {
+            jjmatchedKind = 187;
+            jjmatchedPos = 1;
+         }
+         break;
+      case 61:
+         if ((active2 & 0x20000000000000L) != 0L)
+         {
+            jjmatchedKind = 181;
+            jjmatchedPos = 1;
+         }
+         else if ((active2 & 0x100000000000000L) != 0L)
+         {
+            jjmatchedKind = 184;
+            jjmatchedPos = 1;
+         }
+         else if ((active2 & 0x200000000000000L) != 0L)
+         {
+            jjmatchedKind = 185;
+            jjmatchedPos = 1;
+         }
+         break;
+      case 62:
          if ((active2 & 0x400000000000000L) != 0L)
          {
             jjmatchedKind = 186;
             jjmatchedPos = 1;
          }
-         break;
-      case 45:
-         if ((active3 & 0x10L) != 0L)
+         else if ((active3 & 0x800L) != 0L)
          {
-            jjmatchedKind = 196;
-            jjmatchedPos = 1;
-         }
-         break;
-      case 61:
-         if ((active2 & 0x2000000000000L) != 0L)
-         {
-            jjmatchedKind = 177;
-            jjmatchedPos = 1;
-         }
-         else if ((active2 & 0x10000000000000L) != 0L)
-         {
-            jjmatchedKind = 180;
-            jjmatchedPos = 1;
-         }
-         else if ((active2 & 0x20000000000000L) != 0L)
-         {
-            jjmatchedKind = 181;
-            jjmatchedPos = 1;
-         }
-         break;
-      case 62:
-         if ((active3 & 0x8L) != 0L)
-         {
-            jjmatchedKind = 195;
+            jjmatchedKind = 203;
             jjmatchedPos = 1;
          }
          break;
       case 65:
-         return jjMoveStringLiteralDfa2_0(active0, 0xe084001100100000L, active1, 0xc00040000c0e001L, active2, 0L, active3, 0L);
+         return jjMoveStringLiteralDfa2_0(active0, 0x840000880080000L, active1, 0xc00040000c0e001eL, active2, 0L, active3, 0L);
       case 66:
-         return jjMoveStringLiteralDfa2_0(active0, 0L, active1, 0x1000000L, active2, 0L, active3, 0L);
+         return jjMoveStringLiteralDfa2_0(active0, 0x2000000000000L, active1, 0x10000000L, active2, 0L, active3, 0L);
       case 67:
-         return jjMoveStringLiteralDfa2_0(active0, 0L, active1, 0x300000000L, active2, 0L, active3, 0L);
+         return jjMoveStringLiteralDfa2_0(active0, 0L, active1, 0x3000000000L, active2, 0L, active3, 0L);
       case 68:
-         return jjMoveStringLiteralDfa2_0(active0, 0L, active1, 0x8000000000000L, active2, 0x10L, active3, 0L);
+         return jjMoveStringLiteralDfa2_0(active0, 0L, active1, 0x80000000000000L, active2, 0x100L, active3, 0L);
       case 69:
-         return jjMoveStringLiteralDfa2_0(active0, 0x8200803400000L, active1, 0x2000210082200000L, active2, 0x1080L, active3, 0L);
+         return jjMoveStringLiteralDfa2_0(active0, 0x80100401a00000L, active1, 0x2100822000000L, active2, 0x10802L, active3, 0L);
       case 70:
-         if ((active1 & 0x40L) != 0L)
+         if ((active1 & 0x400L) != 0L)
          {
-            jjmatchedKind = 70;
+            jjmatchedKind = 74;
             jjmatchedPos = 1;
          }
-         return jjMoveStringLiteralDfa2_0(active0, 0x20000000L, active1, 0L, active2, 0L, active3, 0L);
+         return jjMoveStringLiteralDfa2_0(active0, 0x10000000L, active1, 0L, active2, 0L, active3, 0L);
       case 71:
-         return jjMoveStringLiteralDfa2_0(active0, 0x10000000000000L, active1, 0L, active2, 0L, active3, 0L);
+         return jjMoveStringLiteralDfa2_0(active0, 0x100000000000000L, active1, 0L, active2, 0L, active3, 0L);
       case 72:
-         return jjMoveStringLiteralDfa2_0(active0, 0x4000000000L, active1, 0x1f0000000000000L, active2, 0L, active3, 0L);
+         return jjMoveStringLiteralDfa2_0(active0, 0x2000000000L, active1, 0x1f00000000000000L, active2, 0L, active3, 0L);
       case 73:
-         return jjMoveStringLiteralDfa2_0(active0, 0x40180010800000L, active1, 0x500000000004L, active2, 0x4100L, active3, 0L);
+         return jjMoveStringLiteralDfa2_0(active0, 0x4000c0008400000L, active1, 0x5000000000040L, active2, 0x41000L, active3, 0L);
       case 76:
-         return jjMoveStringLiteralDfa2_0(active0, 0L, active1, 0x4000000L, active2, 0x2004L, active3, 0L);
+         return jjMoveStringLiteralDfa2_0(active0, 0L, active1, 0x40000000L, active2, 0x20040L, active3, 0L);
       case 78:
-         if ((active1 & 0x20L) != 0L)
+         if ((active1 & 0x200L) != 0L)
          {
-            jjmatchedKind = 69;
+            jjmatchedKind = 73;
             jjmatchedPos = 1;
          }
-         return jjMoveStringLiteralDfa2_0(active0, 0x48200000000L, active1, 0x1000000400000080L, active2, 0x400L, active3, 0L);
+         return jjMoveStringLiteralDfa2_0(active0, 0x24100000000L, active1, 0x4000000800L, active2, 0x4001L, active3, 0L);
       case 79:
-         if ((active2 & 0x800L) != 0L)
+         if ((active2 & 0x8000L) != 0L)
          {
-            jjmatchedKind = 139;
+            jjmatchedKind = 143;
             jjmatchedPos = 1;
          }
-         return jjMoveStringLiteralDfa2_0(active0, 0x20800004000000L, active1, 0x10a0818000018L, active2, 0x62L, active3, 0L);
+         return jjMoveStringLiteralDfa2_0(active0, 0x208000002000000L, active1, 0x10a08180000180L, active2, 0x620L, active3, 0L);
       case 80:
-         return jjMoveStringLiteralDfa2_0(active0, 0x20000000000L, active1, 0L, active2, 0L, active3, 0L);
+         return jjMoveStringLiteralDfa2_0(active0, 0x10000000000L, active1, 0L, active2, 0L, active3, 0L);
       case 82:
-         return jjMoveStringLiteralDfa2_0(active0, 0x2012040200000L, active1, 0x200000000000302L, active2, 0x208L, active3, 0L);
+         return jjMoveStringLiteralDfa2_0(active0, 0x21209020100000L, active1, 0x2000000000003020L, active2, 0x2080L, active3, 0L);
       case 83:
-         if ((active0 & 0x1000000000000L) != 0L)
+         if ((active0 & 0x10000000000000L) != 0L)
          {
-            jjmatchedKind = 48;
+            jjmatchedKind = 52;
             jjmatchedPos = 1;
          }
-         return jjMoveStringLiteralDfa2_0(active0, 0x408000000L, active1, 0x1f0000L, active2, 0x8000L, active3, 0L);
+         return jjMoveStringLiteralDfa2_0(active0, 0x400204000000L, active1, 0x1f00000L, active2, 0x80000L, active3, 0L);
       case 84:
-         return jjMoveStringLiteralDfa2_0(active0, 0x1c00000000000000L, active1, 0x400f040001c00L, active2, 0L, active3, 0L);
+         return jjMoveStringLiteralDfa2_0(active0, 0xc000000000000000L, active1, 0x400f040001c001L, active2, 0L, active3, 0L);
       case 85:
-         return jjMoveStringLiteralDfa2_0(active0, 0x100000000000000L, active1, 0x2000020000000L, active2, 0L, active3, 0L);
+         return jjMoveStringLiteralDfa2_0(active0, 0x1000800000000000L, active1, 0x20000200000000L, active2, 0L, active3, 0L);
       case 86:
-         return jjMoveStringLiteralDfa2_0(active0, 0x200000000000000L, active1, 0L, active2, 0L, active3, 0L);
+         return jjMoveStringLiteralDfa2_0(active0, 0x2000000000000000L, active1, 0L, active2, 0L, active3, 0L);
       case 88:
-         return jjMoveStringLiteralDfa2_0(active0, 0x400000000000L, active1, 0L, active2, 0L, active3, 0L);
+         return jjMoveStringLiteralDfa2_0(active0, 0x4000000000000L, active1, 0L, active2, 0L, active3, 0L);
       case 89:
-         if ((active0 & 0x80000000L) != 0L)
+         if ((active0 & 0x40000000L) != 0L)
          {
-            jjmatchedKind = 31;
+            jjmatchedKind = 30;
             jjmatchedPos = 1;
          }
          break;
       case 90:
-         if ((active1 & 0x800000000000L) != 0L)
+         if ((active1 & 0x8000000000000L) != 0L)
          {
-            jjmatchedKind = 111;
+            jjmatchedKind = 115;
             jjmatchedPos = 1;
          }
          break;
       case 94:
-         if ((active2 & 0x8000000000000000L) != 0L)
+         if ((active3 & 0x80L) != 0L)
          {
-            jjmatchedKind = 191;
+            jjmatchedKind = 199;
             jjmatchedPos = 1;
          }
          break;
       case 97:
-         return jjMoveStringLiteralDfa2_0(active0, 0xe084001100100000L, active1, 0xc00040000c0e001L, active2, 0L, active3, 0L);
+         return jjMoveStringLiteralDfa2_0(active0, 0x840000880080000L, active1, 0xc00040000c0e001eL, active2, 0L, active3, 0L);
       case 98:
-         return jjMoveStringLiteralDfa2_0(active0, 0L, active1, 0x1000000L, active2, 0L, active3, 0L);
+         return jjMoveStringLiteralDfa2_0(active0, 0x2000000000000L, active1, 0x10000000L, active2, 0L, active3, 0L);
       case 99:
-         return jjMoveStringLiteralDfa2_0(active0, 0L, active1, 0x300000000L, active2, 0L, active3, 0L);
+         return jjMoveStringLiteralDfa2_0(active0, 0L, active1, 0x3000000000L, active2, 0L, active3, 0L);
       case 100:
-         return jjMoveStringLiteralDfa2_0(active0, 0L, active1, 0x8000000000000L, active2, 0x10L, active3, 0L);
+         return jjMoveStringLiteralDfa2_0(active0, 0L, active1, 0x80000000000000L, active2, 0x100L, active3, 0L);
       case 101:
-         return jjMoveStringLiteralDfa2_0(active0, 0x8200803400000L, active1, 0x2000210082200000L, active2, 0x1080L, active3, 0L);
+         return jjMoveStringLiteralDfa2_0(active0, 0x80100401a00000L, active1, 0x2100822000000L, active2, 0x10802L, active3, 0L);
       case 102:
-         if ((active1 & 0x40L) != 0L)
+         if ((active1 & 0x400L) != 0L)
          {
-            jjmatchedKind = 70;
+            jjmatchedKind = 74;
             jjmatchedPos = 1;
          }
-         return jjMoveStringLiteralDfa2_0(active0, 0x20000000L, active1, 0L, active2, 0L, active3, 0L);
+         return jjMoveStringLiteralDfa2_0(active0, 0x10000000L, active1, 0L, active2, 0L, active3, 0L);
       case 103:
-         return jjMoveStringLiteralDfa2_0(active0, 0x10000000000000L, active1, 0L, active2, 0L, active3, 0L);
+         return jjMoveStringLiteralDfa2_0(active0, 0x100000000000000L, active1, 0L, active2, 0L, active3, 0L);
       case 104:
-         return jjMoveStringLiteralDfa2_0(active0, 0x4000000000L, active1, 0x1f0000000000000L, active2, 0L, active3, 0L);
+         return jjMoveStringLiteralDfa2_0(active0, 0x2000000000L, active1, 0x1f00000000000000L, active2, 0L, active3, 0L);
       case 105:
-         return jjMoveStringLiteralDfa2_0(active0, 0x40180010800000L, active1, 0x500000000004L, active2, 0x4100L, active3, 0L);
+         return jjMoveStringLiteralDfa2_0(active0, 0x4000c0008400000L, active1, 0x5000000000040L, active2, 0x41000L, active3, 0L);
       case 108:
-         return jjMoveStringLiteralDfa2_0(active0, 0L, active1, 0x4000000L, active2, 0x2004L, active3, 0L);
+         return jjMoveStringLiteralDfa2_0(active0, 0L, active1, 0x40000000L, active2, 0x20040L, active3, 0L);
       case 110:
-         if ((active1 & 0x20L) != 0L)
+         if ((active1 & 0x200L) != 0L)
          {
-            jjmatchedKind = 69;
+            jjmatchedKind = 73;
             jjmatchedPos = 1;
          }
-         return jjMoveStringLiteralDfa2_0(active0, 0x48200000000L, active1, 0x1000000400000080L, active2, 0x400L, active3, 0L);
+         return jjMoveStringLiteralDfa2_0(active0, 0x24100000000L, active1, 0x4000000800L, active2, 0x4001L, active3, 0L);
       case 111:
-         if ((active2 & 0x800L) != 0L)
+         if ((active2 & 0x8000L) != 0L)
          {
-            jjmatchedKind = 139;
+            jjmatchedKind = 143;
             jjmatchedPos = 1;
          }
-         return jjMoveStringLiteralDfa2_0(active0, 0x20800004000000L, active1, 0x10a0818000018L, active2, 0x62L, active3, 0L);
+         return jjMoveStringLiteralDfa2_0(active0, 0x208000002000000L, active1, 0x10a08180000180L, active2, 0x620L, active3, 0L);
       case 112:
-         return jjMoveStringLiteralDfa2_0(active0, 0x20000000000L, active1, 0L, active2, 0L, active3, 0L);
+         return jjMoveStringLiteralDfa2_0(active0, 0x10000000000L, active1, 0L, active2, 0L, active3, 0L);
       case 114:
-         return jjMoveStringLiteralDfa2_0(active0, 0x2012040200000L, active1, 0x200000000000302L, active2, 0x208L, active3, 0L);
+         return jjMoveStringLiteralDfa2_0(active0, 0x21209020100000L, active1, 0x2000000000003020L, active2, 0x2080L, active3, 0L);
       case 115:
-         if ((active0 & 0x1000000000000L) != 0L)
+         if ((active0 & 0x10000000000000L) != 0L)
          {
-            jjmatchedKind = 48;
+            jjmatchedKind = 52;
             jjmatchedPos = 1;
          }
-         return jjMoveStringLiteralDfa2_0(active0, 0x408000000L, active1, 0x1f0000L, active2, 0x8000L, active3, 0L);
+         return jjMoveStringLiteralDfa2_0(active0, 0x400204000000L, active1, 0x1f00000L, active2, 0x80000L, active3, 0L);
       case 116:
-         return jjMoveStringLiteralDfa2_0(active0, 0x1c00000000000000L, active1, 0x400f040001c00L, active2, 0L, active3, 0L);
+         return jjMoveStringLiteralDfa2_0(active0, 0xc000000000000000L, active1, 0x400f040001c001L, active2, 0L, active3, 0L);
       case 117:
-         return jjMoveStringLiteralDfa2_0(active0, 0x100000000000000L, active1, 0x2000020000000L, active2, 0L, active3, 0L);
+         return jjMoveStringLiteralDfa2_0(active0, 0x1000800000000000L, active1, 0x20000200000000L, active2, 0L, active3, 0L);
       case 118:
-         return jjMoveStringLiteralDfa2_0(active0, 0x200000000000000L, active1, 0L, active2, 0L, active3, 0L);
+         return jjMoveStringLiteralDfa2_0(active0, 0x2000000000000000L, active1, 0L, active2, 0L, active3, 0L);
       case 120:
-         return jjMoveStringLiteralDfa2_0(active0, 0x400000000000L, active1, 0L, active2, 0L, active3, 0L);
+         return jjMoveStringLiteralDfa2_0(active0, 0x4000000000000L, active1, 0L, active2, 0L, active3, 0L);
       case 121:
-         if ((active0 & 0x80000000L) != 0L)
+         if ((active0 & 0x40000000L) != 0L)
          {
-            jjmatchedKind = 31;
+            jjmatchedKind = 30;
             jjmatchedPos = 1;
          }
          break;
       case 122:
-         if ((active1 & 0x800000000000L) != 0L)
+         if ((active1 & 0x8000000000000L) != 0L)
          {
-            jjmatchedKind = 111;
+            jjmatchedKind = 115;
             jjmatchedPos = 1;
          }
          break;
       case 124:
-         if ((active2 & 0x200000000000000L) != 0L)
+         if ((active2 & 0x1000000000000000L) != 0L)
          {
-            jjmatchedKind = 185;
+            jjmatchedKind = 188;
+            jjmatchedPos = 1;
+         }
+         else if ((active3 & 0x2L) != 0L)
+         {
+            jjmatchedKind = 193;
+            jjmatchedPos = 1;
+         }
+         break;
+      case 125:
+         if ((active2 & 0x2000000000000000L) != 0L)
+         {
+            jjmatchedKind = 189;
             jjmatchedPos = 1;
          }
          break;
@@ -425,267 +446,271 @@
    switch(curChar)
    {
       case 53:
-         if ((active1 & 0x8000000000000L) != 0L)
+         if ((active1 & 0x80000000000000L) != 0L)
          {
-            jjmatchedKind = 115;
+            jjmatchedKind = 119;
             jjmatchedPos = 2;
          }
          break;
       case 65:
-         return jjMoveStringLiteralDfa3_0(active0, 0x10000000000L, active1, 0x1f0010300000010L, active2, 0x2L);
+         return jjMoveStringLiteralDfa3_0(active0, 0x8000000000L, active1, 0x1f00103000000100L, active2, 0x20L);
       case 66:
-         return jjMoveStringLiteralDfa3_0(active0, 0L, active1, 0x20040000L, active2, 0L);
+         return jjMoveStringLiteralDfa3_0(active0, 0x800000000000L, active1, 0x200400000L, active2, 0L);
       case 67:
-         if ((active0 & 0x400000000L) != 0L)
+         if ((active0 & 0x200000000L) != 0L)
          {
-            jjmatchedKind = 34;
+            jjmatchedKind = 33;
             jjmatchedPos = 2;
          }
-         return jjMoveStringLiteralDfa3_0(active0, 0L, active1, 0x200400000000L, active2, 0L);
+         return jjMoveStringLiteralDfa3_0(active0, 0L, active1, 0x2004000000000L, active2, 0L);
       case 68:
-         if ((active0 & 0x8000000000L) != 0L)
+         if ((active0 & 0x4000000000L) != 0L)
          {
-            jjmatchedKind = 39;
+            jjmatchedKind = 38;
             jjmatchedPos = 2;
          }
-         else if ((active2 & 0x10L) != 0L)
+         else if ((active2 & 0x100L) != 0L)
          {
-            jjmatchedKind = 132;
+            jjmatchedKind = 136;
             jjmatchedPos = 2;
          }
-         return jjMoveStringLiteralDfa3_0(active0, 0x1c00000241000000L, active1, 0L, active2, 0L);
+         return jjMoveStringLiteralDfa3_0(active0, 0xc000000120800000L, active1, 0x1L, active2, 0L);
       case 69:
-         return jjMoveStringLiteralDfa3_0(active0, 0x4000200000L, active1, 0L, active2, 0xcL);
+         return jjMoveStringLiteralDfa3_0(active0, 0x1002000100000L, active1, 0L, active2, 0xc0L);
       case 70:
-         return jjMoveStringLiteralDfa3_0(active0, 0x20000000L, active1, 0L, active2, 0x1000L);
+         return jjMoveStringLiteralDfa3_0(active0, 0x10000000L, active1, 0L, active2, 0x10000L);
       case 71:
-         if ((active0 & 0x10000000000000L) != 0L)
+         if ((active0 & 0x100000000000000L) != 0L)
          {
-            jjmatchedKind = 52;
+            jjmatchedKind = 56;
             jjmatchedPos = 2;
          }
-         else if ((active0 & 0x200000000000000L) != 0L)
+         else if ((active0 & 0x2000000000000000L) != 0L)
          {
-            jjmatchedKind = 57;
+            jjmatchedKind = 61;
             jjmatchedPos = 2;
          }
-         return jjMoveStringLiteralDfa3_0(active0, 0L, active1, 0x200000L, active2, 0L);
+         return jjMoveStringLiteralDfa3_0(active0, 0L, active1, 0x2000000L, active2, 0L);
       case 73:
-         if ((active1 & 0x100L) != 0L)
+         if ((active1 & 0x1000L) != 0L)
          {
-            jjmatchedKind = 72;
+            jjmatchedKind = 76;
             jjmatchedPos = 2;
          }
-         else if ((active1 & 0x200L) != 0L)
+         else if ((active1 & 0x2000L) != 0L)
          {
-            jjmatchedKind = 73;
+            jjmatchedKind = 77;
             jjmatchedPos = 2;
          }
-         return jjMoveStringLiteralDfa3_0(active0, 0x440000000000L, active1, 0x2000002020000L, active2, 0x8000L);
+         return jjMoveStringLiteralDfa3_0(active0, 0x4220000000000L, active1, 0x20000020200000L, active2, 0x80000L);
+      case 74:
+         return jjMoveStringLiteralDfa3_0(active0, 0x2000000000000L, active1, 0L, active2, 0L);
       case 75:
-         if ((active0 & 0x8000000L) != 0L)
+         if ((active0 & 0x4000000L) != 0L)
          {
-            jjmatchedKind = 27;
+            jjmatchedKind = 26;
             jjmatchedPos = 2;
          }
          break;
       case 76:
-         if ((active2 & 0x2000L) != 0L)
+         if ((active2 & 0x20000L) != 0L)
          {
-            jjmatchedKind = 141;
+            jjmatchedKind = 145;
             jjmatchedPos = 2;
          }
-         return jjMoveStringLiteralDfa3_0(active0, 0x100400000L, active1, 0x2400000000080004L, active2, 0x100L);
+         return jjMoveStringLiteralDfa3_0(active0, 0x80200000L, active1, 0x4000000000800040L, active2, 0x1002L);
       case 77:
-         if ((active0 & 0x100000000000000L) != 0L)
+         if ((active0 & 0x1000000000000000L) != 0L)
          {
-            jjmatchedKind = 56;
+            jjmatchedKind = 60;
             jjmatchedPos = 2;
          }
-         return jjMoveStringLiteralDfa3_0(active0, 0x1010000000L, active1, 0x400000400001L, active2, 0L);
+         return jjMoveStringLiteralDfa3_0(active0, 0x808000000L, active1, 0x4000004000010L, active2, 0L);
       case 78:
-         if ((active0 & 0x40000000000000L) != 0L)
+         if ((active0 & 0x400000000000000L) != 0L)
          {
-            jjmatchedKind = 54;
+            jjmatchedKind = 58;
             jjmatchedPos = 2;
          }
-         return jjMoveStringLiteralDfa3_0(active0, 0x180004000000L, active1, 0x12081090c000L, active2, 0L);
+         return jjMoveStringLiteralDfa3_0(active0, 0xc0002000000L, active1, 0x12081090c0000L, active2, 0L);
       case 79:
-         return jjMoveStringLiteralDfa3_0(active0, 0x2002000000000L, active1, 0x4000082L, active2, 0x200L);
+         return jjMoveStringLiteralDfa3_0(active0, 0x20001000000000L, active1, 0x40000820L, active2, 0x2000L);
       case 80:
-         return jjMoveStringLiteralDfa3_0(active0, 0x8000000000000L, active1, 0x80000000L, active2, 0x40L);
+         return jjMoveStringLiteralDfa3_0(active0, 0x80000000000000L, active1, 0x800000000L, active2, 0x400L);
       case 82:
-         if ((active1 & 0x400L) != 0L)
+         if ((active1 & 0x4000L) != 0L)
          {
-            jjmatchedKind = 74;
+            jjmatchedKind = 78;
             jjmatchedPos = 2;
          }
-         return jjMoveStringLiteralDfa3_0(active0, 0xe000200000000000L, active1, 0x400f040001800L, active2, 0L);
+         return jjMoveStringLiteralDfa3_0(active0, 0x100000000000L, active1, 0x400f040001800eL, active2, 0L);
       case 83:
-         if ((active1 & 0x1000000L) != 0L)
+         if ((active1 & 0x10000000L) != 0L)
          {
-            jjmatchedKind = 88;
+            jjmatchedKind = 92;
             jjmatchedPos = 2;
          }
-         return jjMoveStringLiteralDfa3_0(active0, 0x802900000L, active1, 0x1000000000000000L, active2, 0L);
+         return jjMoveStringLiteralDfa3_0(active0, 0x401480000L, active1, 0L, active2, 0x1L);
       case 84:
-         if ((active0 & 0x800000000000L) != 0L)
+         if ((active0 & 0x8000000000000L) != 0L)
          {
-            jjmatchedKind = 47;
+            jjmatchedKind = 51;
             jjmatchedPos = 2;
          }
-         return jjMoveStringLiteralDfa3_0(active0, 0x20000000000L, active1, 0x800000000002000L, active2, 0x4480L);
+         return jjMoveStringLiteralDfa3_0(active0, 0x410000000000L, active1, 0x8000000000020000L, active2, 0x44800L);
       case 85:
-         return jjMoveStringLiteralDfa3_0(active0, 0x20000000000000L, active1, 0x200080008010008L, active2, 0L);
+         return jjMoveStringLiteralDfa3_0(active0, 0x200000000000000L, active1, 0x2000800080100080L, active2, 0L);
       case 86:
-         return jjMoveStringLiteralDfa3_0(active0, 0x4000000000000L, active1, 0L, active2, 0x20L);
+         return jjMoveStringLiteralDfa3_0(active0, 0x40000000000000L, active1, 0L, active2, 0x200L);
       case 87:
-         if ((active1 & 0x1000000000000L) != 0L)
+         if ((active1 & 0x10000000000000L) != 0L)
          {
-            jjmatchedKind = 112;
+            jjmatchedKind = 116;
             jjmatchedPos = 2;
          }
          break;
       case 88:
-         if ((active0 & 0x80000000000000L) != 0L)
+         if ((active0 & 0x800000000000000L) != 0L)
          {
-            jjmatchedKind = 55;
+            jjmatchedKind = 59;
             jjmatchedPos = 2;
          }
          break;
       case 89:
-         if ((active1 & 0x40000000000L) != 0L)
+         if ((active1 & 0x400000000000L) != 0L)
          {
-            jjmatchedKind = 106;
+            jjmatchedKind = 110;
             jjmatchedPos = 2;
          }
          break;
       case 97:
-         return jjMoveStringLiteralDfa3_0(active0, 0x10000000000L, active1, 0x1f0010300000010L, active2, 0x2L);
+         return jjMoveStringLiteralDfa3_0(active0, 0x8000000000L, active1, 0x1f00103000000100L, active2, 0x20L);
       case 98:
-         return jjMoveStringLiteralDfa3_0(active0, 0L, active1, 0x20040000L, active2, 0L);
+         return jjMoveStringLiteralDfa3_0(active0, 0x800000000000L, active1, 0x200400000L, active2, 0L);
       case 99:
-         if ((active0 & 0x400000000L) != 0L)
+         if ((active0 & 0x200000000L) != 0L)
          {
-            jjmatchedKind = 34;
+            jjmatchedKind = 33;
             jjmatchedPos = 2;
          }
-         return jjMoveStringLiteralDfa3_0(active0, 0L, active1, 0x200400000000L, active2, 0L);
+         return jjMoveStringLiteralDfa3_0(active0, 0L, active1, 0x2004000000000L, active2, 0L);
       case 100:
-         if ((active0 & 0x8000000000L) != 0L)
+         if ((active0 & 0x4000000000L) != 0L)
          {
-            jjmatchedKind = 39;
+            jjmatchedKind = 38;
             jjmatchedPos = 2;
          }
-         else if ((active2 & 0x10L) != 0L)
+         else if ((active2 & 0x100L) != 0L)
          {
-            jjmatchedKind = 132;
+            jjmatchedKind = 136;
             jjmatchedPos = 2;
          }
-         return jjMoveStringLiteralDfa3_0(active0, 0x1c00000241000000L, active1, 0L, active2, 0L);
+         return jjMoveStringLiteralDfa3_0(active0, 0xc000000120800000L, active1, 0x1L, active2, 0L);
       case 101:
-         return jjMoveStringLiteralDfa3_0(active0, 0x4000200000L, active1, 0L, active2, 0xcL);
+         return jjMoveStringLiteralDfa3_0(active0, 0x1002000100000L, active1, 0L, active2, 0xc0L);
       case 102:
-         return jjMoveStringLiteralDfa3_0(active0, 0x20000000L, active1, 0L, active2, 0x1000L);
+         return jjMoveStringLiteralDfa3_0(active0, 0x10000000L, active1, 0L, active2, 0x10000L);
       case 103:
-         if ((active0 & 0x10000000000000L) != 0L)
-         {
-            jjmatchedKind = 52;
-            jjmatchedPos = 2;
-         }
-         else if ((active0 & 0x200000000000000L) != 0L)
-         {
-            jjmatchedKind = 57;
-            jjmatchedPos = 2;
-         }
-         return jjMoveStringLiteralDfa3_0(active0, 0L, active1, 0x200000L, active2, 0L);
-      case 105:
-         if ((active1 & 0x100L) != 0L)
-         {
-            jjmatchedKind = 72;
-            jjmatchedPos = 2;
-         }
-         else if ((active1 & 0x200L) != 0L)
-         {
-            jjmatchedKind = 73;
-            jjmatchedPos = 2;
-         }
-         return jjMoveStringLiteralDfa3_0(active0, 0x440000000000L, active1, 0x2000002020000L, active2, 0x8000L);
-      case 107:
-         if ((active0 & 0x8000000L) != 0L)
-         {
-            jjmatchedKind = 27;
-            jjmatchedPos = 2;
-         }
-         break;
-      case 108:
-         if ((active2 & 0x2000L) != 0L)
-         {
-            jjmatchedKind = 141;
-            jjmatchedPos = 2;
-         }
-         return jjMoveStringLiteralDfa3_0(active0, 0x100400000L, active1, 0x2400000000080004L, active2, 0x100L);
-      case 109:
          if ((active0 & 0x100000000000000L) != 0L)
          {
             jjmatchedKind = 56;
             jjmatchedPos = 2;
          }
-         return jjMoveStringLiteralDfa3_0(active0, 0x1010000000L, active1, 0x400000400001L, active2, 0L);
+         else if ((active0 & 0x2000000000000000L) != 0L)
+         {
+            jjmatchedKind = 61;
+            jjmatchedPos = 2;
+         }
+         return jjMoveStringLiteralDfa3_0(active0, 0L, active1, 0x2000000L, active2, 0L);
+      case 105:
+         if ((active1 & 0x1000L) != 0L)
+         {
+            jjmatchedKind = 76;
+            jjmatchedPos = 2;
+         }
+         else if ((active1 & 0x2000L) != 0L)
+         {
+            jjmatchedKind = 77;
+            jjmatchedPos = 2;
+         }
+         return jjMoveStringLiteralDfa3_0(active0, 0x4220000000000L, active1, 0x20000020200000L, active2, 0x80000L);
+      case 106:
+         return jjMoveStringLiteralDfa3_0(active0, 0x2000000000000L, active1, 0L, active2, 0L);
+      case 107:
+         if ((active0 & 0x4000000L) != 0L)
+         {
+            jjmatchedKind = 26;
+            jjmatchedPos = 2;
+         }
+         break;
+      case 108:
+         if ((active2 & 0x20000L) != 0L)
+         {
+            jjmatchedKind = 145;
+            jjmatchedPos = 2;
+         }
+         return jjMoveStringLiteralDfa3_0(active0, 0x80200000L, active1, 0x4000000000800040L, active2, 0x1002L);
+      case 109:
+         if ((active0 & 0x1000000000000000L) != 0L)
+         {
+            jjmatchedKind = 60;
+            jjmatchedPos = 2;
+         }
+         return jjMoveStringLiteralDfa3_0(active0, 0x808000000L, active1, 0x4000004000010L, active2, 0L);
       case 110:
-         if ((active0 & 0x40000000000000L) != 0L)
+         if ((active0 & 0x400000000000000L) != 0L)
          {
-            jjmatchedKind = 54;
+            jjmatchedKind = 58;
             jjmatchedPos = 2;
          }
-         return jjMoveStringLiteralDfa3_0(active0, 0x180004000000L, active1, 0x12081090c000L, active2, 0L);
+         return jjMoveStringLiteralDfa3_0(active0, 0xc0002000000L, active1, 0x12081090c0000L, active2, 0L);
       case 111:
-         return jjMoveStringLiteralDfa3_0(active0, 0x2002000000000L, active1, 0x4000082L, active2, 0x200L);
+         return jjMoveStringLiteralDfa3_0(active0, 0x20001000000000L, active1, 0x40000820L, active2, 0x2000L);
       case 112:
-         return jjMoveStringLiteralDfa3_0(active0, 0x8000000000000L, active1, 0x80000000L, active2, 0x40L);
+         return jjMoveStringLiteralDfa3_0(active0, 0x80000000000000L, active1, 0x800000000L, active2, 0x400L);
       case 114:
-         if ((active1 & 0x400L) != 0L)
+         if ((active1 & 0x4000L) != 0L)
          {
-            jjmatchedKind = 74;
+            jjmatchedKind = 78;
             jjmatchedPos = 2;
          }
-         return jjMoveStringLiteralDfa3_0(active0, 0xe000200000000000L, active1, 0x400f040001800L, active2, 0L);
+         return jjMoveStringLiteralDfa3_0(active0, 0x100000000000L, active1, 0x400f040001800eL, active2, 0L);
       case 115:
-         if ((active1 & 0x1000000L) != 0L)
+         if ((active1 & 0x10000000L) != 0L)
          {
-            jjmatchedKind = 88;
+            jjmatchedKind = 92;
             jjmatchedPos = 2;
          }
-         return jjMoveStringLiteralDfa3_0(active0, 0x802900000L, active1, 0x1000000000000000L, active2, 0L);
+         return jjMoveStringLiteralDfa3_0(active0, 0x401480000L, active1, 0L, active2, 0x1L);
       case 116:
-         if ((active0 & 0x800000000000L) != 0L)
+         if ((active0 & 0x8000000000000L) != 0L)
          {
-            jjmatchedKind = 47;
+            jjmatchedKind = 51;
             jjmatchedPos = 2;
          }
-         return jjMoveStringLiteralDfa3_0(active0, 0x20000000000L, active1, 0x800000000002000L, active2, 0x4480L);
+         return jjMoveStringLiteralDfa3_0(active0, 0x410000000000L, active1, 0x8000000000020000L, active2, 0x44800L);
       case 117:
-         return jjMoveStringLiteralDfa3_0(active0, 0x20000000000000L, active1, 0x200080008010008L, active2, 0L);
+         return jjMoveStringLiteralDfa3_0(active0, 0x200000000000000L, active1, 0x2000800080100080L, active2, 0L);
       case 118:
-         return jjMoveStringLiteralDfa3_0(active0, 0x4000000000000L, active1, 0L, active2, 0x20L);
+         return jjMoveStringLiteralDfa3_0(active0, 0x40000000000000L, active1, 0L, active2, 0x200L);
       case 119:
-         if ((active1 & 0x1000000000000L) != 0L)
+         if ((active1 & 0x10000000000000L) != 0L)
          {
-            jjmatchedKind = 112;
+            jjmatchedKind = 116;
             jjmatchedPos = 2;
          }
          break;
       case 120:
-         if ((active0 & 0x80000000000000L) != 0L)
+         if ((active0 & 0x800000000000000L) != 0L)
          {
-            jjmatchedKind = 55;
+            jjmatchedKind = 59;
             jjmatchedPos = 2;
          }
          break;
       case 121:
-         if ((active1 & 0x40000000000L) != 0L)
+         if ((active1 & 0x400000000000L) != 0L)
          {
-            jjmatchedKind = 106;
+            jjmatchedKind = 110;
             jjmatchedPos = 2;
          }
          break;
@@ -704,70 +729,53 @@
    switch(curChar)
    {
       case 49:
-         if ((active1 & 0x10000000000000L) != 0L)
+         if ((active1 & 0x100000000000000L) != 0L)
          {
-            jjmatchedKind = 116;
+            jjmatchedKind = 120;
             jjmatchedPos = 3;
          }
          break;
       case 50:
-         return jjMoveStringLiteralDfa4_0(active0, 0L, active1, 0x60000000000000L, active2, 0L);
+         return jjMoveStringLiteralDfa4_0(active0, 0L, active1, 0x600000000000000L, active2, 0L);
       case 51:
-         return jjMoveStringLiteralDfa4_0(active0, 0L, active1, 0x80000000000000L, active2, 0L);
+         return jjMoveStringLiteralDfa4_0(active0, 0L, active1, 0x800000000000000L, active2, 0L);
       case 53:
-         return jjMoveStringLiteralDfa4_0(active0, 0L, active1, 0x100000000000000L, active2, 0L);
+         return jjMoveStringLiteralDfa4_0(active0, 0L, active1, 0x1000000000000000L, active2, 0L);
       case 65:
-         if ((active1 & 0x800000000000000L) != 0L)
+         if ((active1 & 0x8000000000000000L) != 0L)
          {
-            jjmatchedKind = 123;
+            jjmatchedKind = 127;
             jjmatchedPos = 3;
          }
-         else if ((active2 & 0x80L) != 0L)
+         else if ((active2 & 0x800L) != 0L)
          {
-            jjmatchedKind = 135;
+            jjmatchedKind = 139;
             jjmatchedPos = 3;
          }
-         return jjMoveStringLiteralDfa4_0(active0, 0x8000000000000L, active1, 0x8000002000L, active2, 0x100cL);
+         return jjMoveStringLiteralDfa4_0(active0, 0x80000000000000L, active1, 0x80000020000L, active2, 0x100c0L);
       case 66:
-         return jjMoveStringLiteralDfa4_0(active0, 0L, active1, 0x4000000000L, active2, 0L);
+         return jjMoveStringLiteralDfa4_0(active0, 0L, active1, 0x40000000000L, active2, 0L);
       case 67:
-         if ((active0 & 0x800000000L) != 0L)
+         if ((active0 & 0x400000000L) != 0L)
          {
-            jjmatchedKind = 35;
+            jjmatchedKind = 34;
             jjmatchedPos = 3;
          }
-         return jjMoveStringLiteralDfa4_0(active0, 0x2000000L, active1, 0x10000000L, active2, 0L);
+         return jjMoveStringLiteralDfa4_0(active0, 0x1000000L, active1, 0x100000000L, active2, 0L);
       case 68:
-         if ((active0 & 0x100000000000L) != 0L)
+         if ((active0 & 0x80000000000L) != 0L)
          {
-            jjmatchedKind = 44;
+            jjmatchedKind = 43;
             jjmatchedPos = 3;
          }
-         else if ((active1 & 0x800000L) != 0L)
+         else if ((active1 & 0x8000000L) != 0L)
          {
-            jjmatchedKind = 87;
+            jjmatchedKind = 91;
             jjmatchedPos = 3;
          }
-         else if ((active1 & 0x2000000000000L) != 0L)
+         else if ((active1 & 0x20000000000000L) != 0L)
          {
-            jjmatchedKind = 113;
-            jjmatchedPos = 3;
-         }
-         else if ((active2 & 0x2L) != 0L)
-         {
-            jjmatchedKind = 129;
-            jjmatchedPos = 3;
-         }
-         return jjMoveStringLiteralDfa4_0(active0, 0L, active1, 0x1080L, active2, 0L);
-      case 69:
-         if ((active0 & 0x100000L) != 0L)
-         {
-            jjmatchedKind = 20;
-            jjmatchedPos = 3;
-         }
-         else if ((active1 & 0x200000000000000L) != 0L)
-         {
-            jjmatchedKind = 121;
+            jjmatchedKind = 117;
             jjmatchedPos = 3;
          }
          else if ((active2 & 0x20L) != 0L)
@@ -775,131 +783,133 @@
             jjmatchedKind = 133;
             jjmatchedPos = 3;
          }
-         return jjMoveStringLiteralDfa4_0(active0, 0x1c00001240400000L, active1, 0x3000402000600000L, active2, 0x100L);
-      case 70:
-         return jjMoveStringLiteralDfa4_0(active0, 0x200000L, active1, 0L, active2, 0L);
-      case 71:
-         if ((active1 & 0x4000L) != 0L)
+         return jjMoveStringLiteralDfa4_0(active0, 0x1000000000000L, active1, 0x10800L, active2, 0L);
+      case 69:
+         if ((active0 & 0x80000L) != 0L)
          {
-            jjmatchedKind = 78;
+            jjmatchedKind = 19;
             jjmatchedPos = 3;
          }
-         return jjMoveStringLiteralDfa4_0(active0, 0L, active1, 0x8000L, active2, 0L);
-      case 72:
-         if ((active2 & 0x4000L) != 0L)
+         else if ((active1 & 0x2000000000000000L) != 0L)
          {
-            jjmatchedKind = 142;
+            jjmatchedKind = 125;
+            jjmatchedPos = 3;
+         }
+         else if ((active2 & 0x200L) != 0L)
+         {
+            jjmatchedKind = 137;
+            jjmatchedPos = 3;
+         }
+         return jjMoveStringLiteralDfa4_0(active0, 0xc002000920200000L, active1, 0x4020006000001L, active2, 0x1003L);
+      case 70:
+         return jjMoveStringLiteralDfa4_0(active0, 0x100000L, active1, 0L, active2, 0L);
+      case 71:
+         if ((active1 & 0x40000L) != 0L)
+         {
+            jjmatchedKind = 82;
+            jjmatchedPos = 3;
+         }
+         return jjMoveStringLiteralDfa4_0(active0, 0L, active1, 0x80000L, active2, 0L);
+      case 72:
+         if ((active2 & 0x40000L) != 0L)
+         {
+            jjmatchedKind = 146;
             jjmatchedPos = 3;
          }
          break;
       case 73:
-         return jjMoveStringLiteralDfa4_0(active0, 0x2004020010000000L, active1, 0x80000L, active2, 0L);
+         return jjMoveStringLiteralDfa4_0(active0, 0x40010008000000L, active1, 0x800002L, active2, 0L);
+      case 74:
+         return jjMoveStringLiteralDfa4_0(active0, 0x800000000000L, active1, 0L, active2, 0L);
       case 76:
-         if ((active1 & 0x2000000L) != 0L)
+         if ((active1 & 0x20000000L) != 0L)
          {
-            jjmatchedKind = 89;
+            jjmatchedKind = 93;
             jjmatchedPos = 3;
          }
-         return jjMoveStringLiteralDfa4_0(active0, 0L, active1, 0xc0040810L, active2, 0L);
+         return jjMoveStringLiteralDfa4_0(active0, 0L, active1, 0xc00408100L, active2, 0L);
       case 77:
-         if ((active0 & 0x2000000000L) != 0L)
+         if ((active0 & 0x1000000000L) != 0L)
          {
-            jjmatchedKind = 37;
+            jjmatchedKind = 36;
             jjmatchedPos = 3;
          }
          break;
       case 78:
-         return jjMoveStringLiteralDfa4_0(active0, 0x20000000000000L, active1, 0x8000008L, active2, 0x8000L);
+         return jjMoveStringLiteralDfa4_0(active0, 0x200000000000000L, active1, 0x80000080L, active2, 0x80000L);
       case 79:
+         if ((active2 & 0x4000L) != 0L)
+         {
+            jjmatchedKind = 142;
+            jjmatchedPos = 3;
+         }
+         return jjMoveStringLiteralDfa4_0(active0, 0x20000000000L, active1, 0x2004040000000L, active2, 0L);
+      case 80:
+         if ((active2 & 0x2000L) != 0L)
+         {
+            jjmatchedKind = 141;
+            jjmatchedPos = 3;
+         }
+         return jjMoveStringLiteralDfa4_0(active0, 0x208000000000L, active1, 0x10L, active2, 0L);
+      case 82:
+         if ((active1 & 0x100000000000L) != 0L)
+         {
+            jjmatchedKind = 108;
+            jjmatchedPos = 3;
+         }
+         return jjMoveStringLiteralDfa4_0(active0, 0x402000000000L, active1, 0x800000300000L, active2, 0L);
+      case 83:
+         return jjMoveStringLiteralDfa4_0(active0, 0x4000012000000L, active1, 0x4000013200000000L, active2, 0L);
+      case 84:
+         return jjMoveStringLiteralDfa4_0(active0, 0x400000L, active1, 0x208000000040L, active2, 0L);
+      case 85:
+         return jjMoveStringLiteralDfa4_0(active0, 0x20040080800000L, active1, 0x41000001000020L, active2, 0L);
+      case 86:
+         return jjMoveStringLiteralDfa4_0(active0, 0x100000000000L, active1, 0L, active2, 0L);
+      case 89:
          if ((active2 & 0x400L) != 0L)
          {
             jjmatchedKind = 138;
             jjmatchedPos = 3;
          }
-         return jjMoveStringLiteralDfa4_0(active0, 0x40000000000L, active1, 0x200404000000L, active2, 0L);
-      case 80:
-         if ((active2 & 0x200L) != 0L)
-         {
-            jjmatchedKind = 137;
-            jjmatchedPos = 3;
-         }
-         return jjMoveStringLiteralDfa4_0(active0, 0x10000000000L, active1, 0x1L, active2, 0L);
-      case 82:
-         if ((active1 & 0x10000000000L) != 0L)
-         {
-            jjmatchedKind = 104;
-            jjmatchedPos = 3;
-         }
-         return jjMoveStringLiteralDfa4_0(active0, 0x4000000000L, active1, 0x80000030000L, active2, 0L);
-      case 83:
-         return jjMoveStringLiteralDfa4_0(active0, 0x400024000000L, active1, 0x400001320000000L, active2, 0L);
-      case 84:
-         return jjMoveStringLiteralDfa4_0(active0, 0x800000L, active1, 0x20800000004L, active2, 0L);
-      case 85:
-         return jjMoveStringLiteralDfa4_0(active0, 0x2080101000000L, active1, 0x4100000100002L, active2, 0L);
-      case 86:
-         return jjMoveStringLiteralDfa4_0(active0, 0x200000000000L, active1, 0L, active2, 0L);
-      case 89:
-         if ((active2 & 0x40L) != 0L)
-         {
-            jjmatchedKind = 134;
-            jjmatchedPos = 3;
-         }
          break;
       case 95:
-         return jjMoveStringLiteralDfa4_0(active0, 0xc000000000000000L, active1, 0L, active2, 0L);
+         return jjMoveStringLiteralDfa4_0(active0, 0L, active1, 0xcL, active2, 0L);
       case 97:
-         if ((active1 & 0x800000000000000L) != 0L)
+         if ((active1 & 0x8000000000000000L) != 0L)
          {
-            jjmatchedKind = 123;
+            jjmatchedKind = 127;
             jjmatchedPos = 3;
          }
-         else if ((active2 & 0x80L) != 0L)
+         else if ((active2 & 0x800L) != 0L)
          {
-            jjmatchedKind = 135;
+            jjmatchedKind = 139;
             jjmatchedPos = 3;
          }
-         return jjMoveStringLiteralDfa4_0(active0, 0x8000000000000L, active1, 0x8000002000L, active2, 0x100cL);
+         return jjMoveStringLiteralDfa4_0(active0, 0x80000000000000L, active1, 0x80000020000L, active2, 0x100c0L);
       case 98:
-         return jjMoveStringLiteralDfa4_0(active0, 0L, active1, 0x4000000000L, active2, 0L);
+         return jjMoveStringLiteralDfa4_0(active0, 0L, active1, 0x40000000000L, active2, 0L);
       case 99:
-         if ((active0 & 0x800000000L) != 0L)
+         if ((active0 & 0x400000000L) != 0L)
          {
-            jjmatchedKind = 35;
+            jjmatchedKind = 34;
             jjmatchedPos = 3;
          }
-         return jjMoveStringLiteralDfa4_0(active0, 0x2000000L, active1, 0x10000000L, active2, 0L);
+         return jjMoveStringLiteralDfa4_0(active0, 0x1000000L, active1, 0x100000000L, active2, 0L);
       case 100:
-         if ((active0 & 0x100000000000L) != 0L)
+         if ((active0 & 0x80000000000L) != 0L)
          {
-            jjmatchedKind = 44;
+            jjmatchedKind = 43;
             jjmatchedPos = 3;
          }
-         else if ((active1 & 0x800000L) != 0L)
+         else if ((active1 & 0x8000000L) != 0L)
          {
-            jjmatchedKind = 87;
+            jjmatchedKind = 91;
             jjmatchedPos = 3;
          }
-         else if ((active1 & 0x2000000000000L) != 0L)
+         else if ((active1 & 0x20000000000000L) != 0L)
          {
-            jjmatchedKind = 113;
-            jjmatchedPos = 3;
-         }
-         else if ((active2 & 0x2L) != 0L)
-         {
-            jjmatchedKind = 129;
-            jjmatchedPos = 3;
-         }
-         return jjMoveStringLiteralDfa4_0(active0, 0L, active1, 0x1080L, active2, 0L);
-      case 101:
-         if ((active0 & 0x100000L) != 0L)
-         {
-            jjmatchedKind = 20;
-            jjmatchedPos = 3;
-         }
-         else if ((active1 & 0x200000000000000L) != 0L)
-         {
-            jjmatchedKind = 121;
+            jjmatchedKind = 117;
             jjmatchedPos = 3;
          }
          else if ((active2 & 0x20L) != 0L)
@@ -907,76 +917,95 @@
             jjmatchedKind = 133;
             jjmatchedPos = 3;
          }
-         return jjMoveStringLiteralDfa4_0(active0, 0x1c00001240400000L, active1, 0x3000402000600000L, active2, 0x100L);
-      case 102:
-         return jjMoveStringLiteralDfa4_0(active0, 0x200000L, active1, 0L, active2, 0L);
-      case 103:
-         if ((active1 & 0x4000L) != 0L)
+         return jjMoveStringLiteralDfa4_0(active0, 0x1000000000000L, active1, 0x10800L, active2, 0L);
+      case 101:
+         if ((active0 & 0x80000L) != 0L)
          {
-            jjmatchedKind = 78;
+            jjmatchedKind = 19;
             jjmatchedPos = 3;
          }
-         return jjMoveStringLiteralDfa4_0(active0, 0L, active1, 0x8000L, active2, 0L);
+         else if ((active1 & 0x2000000000000000L) != 0L)
+         {
+            jjmatchedKind = 125;
+            jjmatchedPos = 3;
+         }
+         else if ((active2 & 0x200L) != 0L)
+         {
+            jjmatchedKind = 137;
+            jjmatchedPos = 3;
+         }
+         return jjMoveStringLiteralDfa4_0(active0, 0xc002000920200000L, active1, 0x4020006000001L, active2, 0x1003L);
+      case 102:
+         return jjMoveStringLiteralDfa4_0(active0, 0x100000L, active1, 0L, active2, 0L);
+      case 103:
+         if ((active1 & 0x40000L) != 0L)
+         {
+            jjmatchedKind = 82;
+            jjmatchedPos = 3;
+         }
+         return jjMoveStringLiteralDfa4_0(active0, 0L, active1, 0x80000L, active2, 0L);
       case 104:
+         if ((active2 & 0x40000L) != 0L)
+         {
+            jjmatchedKind = 146;
+            jjmatchedPos = 3;
+         }
+         break;
+      case 105:
+         return jjMoveStringLiteralDfa4_0(active0, 0x40010008000000L, active1, 0x800002L, active2, 0L);
+      case 106:
+         return jjMoveStringLiteralDfa4_0(active0, 0x800000000000L, active1, 0L, active2, 0L);
+      case 108:
+         if ((active1 & 0x20000000L) != 0L)
+         {
+            jjmatchedKind = 93;
+            jjmatchedPos = 3;
+         }
+         return jjMoveStringLiteralDfa4_0(active0, 0L, active1, 0xc00408100L, active2, 0L);
+      case 109:
+         if ((active0 & 0x1000000000L) != 0L)
+         {
+            jjmatchedKind = 36;
+            jjmatchedPos = 3;
+         }
+         break;
+      case 110:
+         return jjMoveStringLiteralDfa4_0(active0, 0x200000000000000L, active1, 0x80000080L, active2, 0x80000L);
+      case 111:
          if ((active2 & 0x4000L) != 0L)
          {
             jjmatchedKind = 142;
             jjmatchedPos = 3;
          }
-         break;
-      case 105:
-         return jjMoveStringLiteralDfa4_0(active0, 0x2004020010000000L, active1, 0x80000L, active2, 0L);
-      case 108:
-         if ((active1 & 0x2000000L) != 0L)
+         return jjMoveStringLiteralDfa4_0(active0, 0x20000000000L, active1, 0x2004040000000L, active2, 0L);
+      case 112:
+         if ((active2 & 0x2000L) != 0L)
          {
-            jjmatchedKind = 89;
+            jjmatchedKind = 141;
             jjmatchedPos = 3;
          }
-         return jjMoveStringLiteralDfa4_0(active0, 0L, active1, 0xc0040810L, active2, 0L);
-      case 109:
-         if ((active0 & 0x2000000000L) != 0L)
+         return jjMoveStringLiteralDfa4_0(active0, 0x208000000000L, active1, 0x10L, active2, 0L);
+      case 114:
+         if ((active1 & 0x100000000000L) != 0L)
          {
-            jjmatchedKind = 37;
+            jjmatchedKind = 108;
             jjmatchedPos = 3;
          }
-         break;
-      case 110:
-         return jjMoveStringLiteralDfa4_0(active0, 0x20000000000000L, active1, 0x8000008L, active2, 0x8000L);
-      case 111:
+         return jjMoveStringLiteralDfa4_0(active0, 0x402000000000L, active1, 0x800000300000L, active2, 0L);
+      case 115:
+         return jjMoveStringLiteralDfa4_0(active0, 0x4000012000000L, active1, 0x4000013200000000L, active2, 0L);
+      case 116:
+         return jjMoveStringLiteralDfa4_0(active0, 0x400000L, active1, 0x208000000040L, active2, 0L);
+      case 117:
+         return jjMoveStringLiteralDfa4_0(active0, 0x20040080800000L, active1, 0x41000001000020L, active2, 0L);
+      case 118:
+         return jjMoveStringLiteralDfa4_0(active0, 0x100000000000L, active1, 0L, active2, 0L);
+      case 121:
          if ((active2 & 0x400L) != 0L)
          {
             jjmatchedKind = 138;
             jjmatchedPos = 3;
          }
-         return jjMoveStringLiteralDfa4_0(active0, 0x40000000000L, active1, 0x200404000000L, active2, 0L);
-      case 112:
-         if ((active2 & 0x200L) != 0L)
-         {
-            jjmatchedKind = 137;
-            jjmatchedPos = 3;
-         }
-         return jjMoveStringLiteralDfa4_0(active0, 0x10000000000L, active1, 0x1L, active2, 0L);
-      case 114:
-         if ((active1 & 0x10000000000L) != 0L)
-         {
-            jjmatchedKind = 104;
-            jjmatchedPos = 3;
-         }
-         return jjMoveStringLiteralDfa4_0(active0, 0x4000000000L, active1, 0x80000030000L, active2, 0L);
-      case 115:
-         return jjMoveStringLiteralDfa4_0(active0, 0x400024000000L, active1, 0x400001320000000L, active2, 0L);
-      case 116:
-         return jjMoveStringLiteralDfa4_0(active0, 0x800000L, active1, 0x20800000004L, active2, 0L);
-      case 117:
-         return jjMoveStringLiteralDfa4_0(active0, 0x2080101000000L, active1, 0x4100000100002L, active2, 0L);
-      case 118:
-         return jjMoveStringLiteralDfa4_0(active0, 0x200000000000L, active1, 0L, active2, 0L);
-      case 121:
-         if ((active2 & 0x40L) != 0L)
-         {
-            jjmatchedKind = 134;
-            jjmatchedPos = 3;
-         }
          break;
       default :
          break;
@@ -993,38 +1022,21 @@
    switch(curChar)
    {
       case 49:
-         return jjMoveStringLiteralDfa5_0(active0, 0L, active1, 0x100000000000000L, active2, 0L);
+         return jjMoveStringLiteralDfa5_0(active0, 0L, active1, 0x1000000000000000L, active2, 0L);
       case 50:
-         return jjMoveStringLiteralDfa5_0(active0, 0L, active1, 0x20000000000000L, active2, 0L);
+         return jjMoveStringLiteralDfa5_0(active0, 0L, active1, 0x200000000000000L, active2, 0L);
       case 53:
-         return jjMoveStringLiteralDfa5_0(active0, 0L, active1, 0x40000000000000L, active2, 0L);
+         return jjMoveStringLiteralDfa5_0(active0, 0L, active1, 0x400000000000000L, active2, 0L);
       case 56:
-         return jjMoveStringLiteralDfa5_0(active0, 0L, active1, 0x80000000000000L, active2, 0L);
+         return jjMoveStringLiteralDfa5_0(active0, 0L, active1, 0x800000000000000L, active2, 0L);
       case 65:
-         return jjMoveStringLiteralDfa5_0(active0, 0x2000000000000000L, active1, 0x890040800L, active2, 0L);
+         return jjMoveStringLiteralDfa5_0(active0, 0L, active1, 0x8900408002L, active2, 0L);
       case 67:
-         return jjMoveStringLiteralDfa5_0(active0, 0x1400000L, active1, 0L, active2, 0L);
+         return jjMoveStringLiteralDfa5_0(active0, 0x2000000a00000L, active1, 0L, active2, 0L);
       case 68:
-         if ((active0 & 0x1000000000L) != 0L)
+         if ((active0 & 0x800000000L) != 0L)
          {
-            jjmatchedKind = 36;
-            jjmatchedPos = 4;
-         }
-         else if ((active1 & 0x8L) != 0L)
-         {
-            jjmatchedKind = 67;
-            jjmatchedPos = 4;
-         }
-         else if ((active1 & 0x8000000L) != 0L)
-         {
-            jjmatchedKind = 91;
-            jjmatchedPos = 4;
-         }
-         return jjMoveStringLiteralDfa5_0(active0, 0L, active1, 0x400000000L, active2, 0L);
-      case 69:
-         if ((active0 & 0x4000000000L) != 0L)
-         {
-            jjmatchedKind = 38;
+            jjmatchedKind = 35;
             jjmatchedPos = 4;
          }
          else if ((active1 & 0x80L) != 0L)
@@ -1032,169 +1044,169 @@
             jjmatchedKind = 71;
             jjmatchedPos = 4;
          }
-         else if ((active1 & 0x100000000L) != 0L)
+         else if ((active1 & 0x80000000L) != 0L)
          {
-            jjmatchedKind = 96;
+            jjmatchedKind = 95;
             jjmatchedPos = 4;
          }
-         else if ((active1 & 0x200000000L) != 0L)
+         return jjMoveStringLiteralDfa5_0(active0, 0L, active1, 0x4000000000L, active2, 0L);
+      case 69:
+         if ((active0 & 0x2000000000L) != 0L)
          {
-            jjmatchedKind = 97;
+            jjmatchedKind = 37;
             jjmatchedPos = 4;
          }
-         else if ((active1 & 0x400000000000000L) != 0L)
+         else if ((active1 & 0x800L) != 0L)
          {
-            jjmatchedKind = 122;
+            jjmatchedKind = 75;
             jjmatchedPos = 4;
          }
-         return jjMoveStringLiteralDfa5_0(active0, 0x120000000L, active1, 0x4040000014L, active2, 0L);
+         else if ((active1 & 0x1000000000L) != 0L)
+         {
+            jjmatchedKind = 100;
+            jjmatchedPos = 4;
+         }
+         else if ((active1 & 0x2000000000L) != 0L)
+         {
+            jjmatchedKind = 101;
+            jjmatchedPos = 4;
+         }
+         else if ((active1 & 0x4000000000000000L) != 0L)
+         {
+            jjmatchedKind = 126;
+            jjmatchedPos = 4;
+         }
+         return jjMoveStringLiteralDfa5_0(active0, 0x800090000000L, active1, 0x40400000140L, active2, 0L);
       case 70:
-         if ((active0 & 0x200000000L) != 0L)
+         if ((active0 & 0x100000000L) != 0L)
          {
-            jjmatchedKind = 33;
+            jjmatchedKind = 32;
             jjmatchedPos = 4;
          }
-         return jjMoveStringLiteralDfa5_0(active0, 0L, active1, 0x8000000000L, active2, 0L);
+         return jjMoveStringLiteralDfa5_0(active0, 0L, active1, 0x80000000000L, active2, 0L);
       case 71:
-         if ((active2 & 0x8000L) != 0L)
+         if ((active2 & 0x80000L) != 0L)
          {
-            jjmatchedKind = 143;
+            jjmatchedKind = 147;
             jjmatchedPos = 4;
          }
          break;
       case 72:
-         if ((active0 & 0x10000000000L) != 0L)
+         if ((active0 & 0x8000000000L) != 0L)
          {
-            jjmatchedKind = 40;
+            jjmatchedKind = 39;
             jjmatchedPos = 4;
          }
-         else if ((active1 & 0x20000000000L) != 0L)
+         else if ((active1 & 0x200000000000L) != 0L)
          {
-            jjmatchedKind = 105;
+            jjmatchedKind = 109;
             jjmatchedPos = 4;
          }
          break;
       case 73:
-         if ((active1 & 0x10000L) != 0L)
+         if ((active1 & 0x100000L) != 0L)
          {
-            jjmatchedKind = 80;
+            jjmatchedKind = 84;
             jjmatchedPos = 4;
          }
-         else if ((active1 & 0x20000L) != 0L)
+         else if ((active1 & 0x200000L) != 0L)
          {
-            jjmatchedKind = 81;
+            jjmatchedKind = 85;
             jjmatchedPos = 4;
          }
-         return jjMoveStringLiteralDfa5_0(active0, 0x200000a00000L, active1, 0L, active2, 0L);
+         return jjMoveStringLiteralDfa5_0(active0, 0x1500000500000L, active1, 0L, active2, 0L);
       case 76:
-         return jjMoveStringLiteralDfa5_0(active0, 0L, active1, 0x1L, active2, 0L);
+         return jjMoveStringLiteralDfa5_0(active0, 0x200000000000L, active1, 0x10L, active2, 0L);
       case 77:
-         return jjMoveStringLiteralDfa5_0(active0, 0L, active1, 0x108000L, active2, 0L);
+         return jjMoveStringLiteralDfa5_0(active0, 0L, active1, 0x1080000L, active2, 0L);
       case 78:
+         if ((active0 & 0x20000000000L) != 0L)
+         {
+            jjmatchedKind = 41;
+            jjmatchedPos = 4;
+         }
+         return jjMoveStringLiteralDfa5_0(active0, 0x40000000000000L, active1, 0x2020000000000L, active2, 0x1000L);
+      case 79:
+         return jjMoveStringLiteralDfa5_0(active0, 0x10000000000L, active1, 0L, active2, 0L);
+      case 80:
+         if ((active0 & 0x20000000000000L) != 0L)
+         {
+            jjmatchedKind = 53;
+            jjmatchedPos = 4;
+         }
+         return jjMoveStringLiteralDfa5_0(active0, 0L, active1, 0x28L, active2, 0L);
+      case 82:
+         if ((active0 & 0x20000000L) != 0L)
+         {
+            jjmatchedKind = 29;
+            jjmatchedPos = 4;
+         }
+         else if ((active1 & 0x40000000L) != 0L)
+         {
+            jjmatchedKind = 94;
+            jjmatchedPos = 4;
+         }
+         else if ((active2 & 0x40L) != 0L)
+         {
+            jjmatchedKind = 134;
+            jjmatchedPos = 4;
+         }
+         return jjMoveStringLiteralDfa5_0(active0, 0x80000001000000L, active1, 0L, active2, 0x1L);
+      case 83:
          if ((active0 & 0x40000000000L) != 0L)
          {
             jjmatchedKind = 42;
             jjmatchedPos = 4;
          }
-         return jjMoveStringLiteralDfa5_0(active0, 0x4000000000000L, active1, 0x202000000000L, active2, 0x100L);
-      case 79:
-         return jjMoveStringLiteralDfa5_0(active0, 0x20000000000L, active1, 0L, active2, 0L);
-      case 80:
-         if ((active0 & 0x2000000000000L) != 0L)
+         else if ((active1 & 0x800000000000L) != 0L)
          {
-            jjmatchedKind = 49;
+            jjmatchedKind = 111;
             jjmatchedPos = 4;
          }
-         return jjMoveStringLiteralDfa5_0(active0, 0x8000000000000000L, active1, 0x2L, active2, 0L);
-      case 82:
-         if ((active0 & 0x40000000L) != 0L)
-         {
-            jjmatchedKind = 30;
-            jjmatchedPos = 4;
-         }
-         else if ((active1 & 0x4000000L) != 0L)
-         {
-            jjmatchedKind = 90;
-            jjmatchedPos = 4;
-         }
-         else if ((active2 & 0x4L) != 0L)
-         {
-            jjmatchedKind = 130;
-            jjmatchedPos = 4;
-         }
-         return jjMoveStringLiteralDfa5_0(active0, 0x8000002000000L, active1, 0x1000000000000000L, active2, 0L);
-      case 83:
-         if ((active0 & 0x80000000000L) != 0L)
-         {
-            jjmatchedKind = 43;
-            jjmatchedPos = 4;
-         }
-         else if ((active1 & 0x80000000000L) != 0L)
-         {
-            jjmatchedKind = 107;
-            jjmatchedPos = 4;
-         }
-         return jjMoveStringLiteralDfa5_0(active0, 0x4000000000000000L, active1, 0L, active2, 0L);
+         return jjMoveStringLiteralDfa5_0(active0, 0L, active1, 0x4L, active2, 0L);
       case 84:
-         if ((active0 & 0x10000000L) != 0L)
+         if ((active0 & 0x8000000L) != 0L)
          {
-            jjmatchedKind = 28;
+            jjmatchedKind = 27;
             jjmatchedPos = 4;
          }
-         else if ((active0 & 0x20000000000000L) != 0L)
+         else if ((active0 & 0x200000000000000L) != 0L)
          {
-            jjmatchedKind = 53;
+            jjmatchedKind = 57;
             jjmatchedPos = 4;
          }
-         else if ((active1 & 0x1000L) != 0L)
+         else if ((active1 & 0x10000L) != 0L)
          {
-            jjmatchedKind = 76;
+            jjmatchedKind = 80;
             jjmatchedPos = 4;
          }
-         return jjMoveStringLiteralDfa5_0(active0, 0x400004000000L, active1, 0x2000101020482000L, active2, 0x8L);
+         return jjMoveStringLiteralDfa5_0(active0, 0x4000002000000L, active1, 0x1010204820000L, active2, 0x82L);
       case 85:
-         return jjMoveStringLiteralDfa5_0(active0, 0L, active1, 0x4000000000000L, active2, 0x1000L);
+         return jjMoveStringLiteralDfa5_0(active0, 0L, active1, 0x40000000000000L, active2, 0x10000L);
       case 86:
-         if ((active0 & 0x400000000000000L) != 0L)
+         if ((active0 & 0x4000000000000000L) != 0L)
          {
-            jjmatchedKind = 58;
+            jjmatchedKind = 62;
             jjmatchedPos = 4;
          }
-         return jjMoveStringLiteralDfa5_0(active0, 0x1800000000000000L, active1, 0L, active2, 0L);
+         return jjMoveStringLiteralDfa5_0(active0, 0x8000000000000000L, active1, 0x1L, active2, 0L);
       case 88:
-         if ((active1 & 0x200000L) != 0L)
+         if ((active1 & 0x2000000L) != 0L)
          {
-            jjmatchedKind = 85;
+            jjmatchedKind = 89;
             jjmatchedPos = 4;
          }
          break;
       case 90:
-         return jjMoveStringLiteralDfa5_0(active0, 0L, active1, 0x400000000000L, active2, 0L);
+         return jjMoveStringLiteralDfa5_0(active0, 0L, active1, 0x4000000000000L, active2, 0L);
       case 97:
-         return jjMoveStringLiteralDfa5_0(active0, 0x2000000000000000L, active1, 0x890040800L, active2, 0L);
+         return jjMoveStringLiteralDfa5_0(active0, 0L, active1, 0x8900408002L, active2, 0L);
       case 99:
-         return jjMoveStringLiteralDfa5_0(active0, 0x1400000L, active1, 0L, active2, 0L);
+         return jjMoveStringLiteralDfa5_0(active0, 0x2000000a00000L, active1, 0L, active2, 0L);
       case 100:
-         if ((active0 & 0x1000000000L) != 0L)
+         if ((active0 & 0x800000000L) != 0L)
          {
-            jjmatchedKind = 36;
-            jjmatchedPos = 4;
-         }
-         else if ((active1 & 0x8L) != 0L)
-         {
-            jjmatchedKind = 67;
-            jjmatchedPos = 4;
-         }
-         else if ((active1 & 0x8000000L) != 0L)
-         {
-            jjmatchedKind = 91;
-            jjmatchedPos = 4;
-         }
-         return jjMoveStringLiteralDfa5_0(active0, 0L, active1, 0x400000000L, active2, 0L);
-      case 101:
-         if ((active0 & 0x4000000000L) != 0L)
-         {
-            jjmatchedKind = 38;
+            jjmatchedKind = 35;
             jjmatchedPos = 4;
          }
          else if ((active1 & 0x80L) != 0L)
@@ -1202,144 +1214,161 @@
             jjmatchedKind = 71;
             jjmatchedPos = 4;
          }
-         else if ((active1 & 0x100000000L) != 0L)
+         else if ((active1 & 0x80000000L) != 0L)
          {
-            jjmatchedKind = 96;
+            jjmatchedKind = 95;
             jjmatchedPos = 4;
          }
-         else if ((active1 & 0x200000000L) != 0L)
+         return jjMoveStringLiteralDfa5_0(active0, 0L, active1, 0x4000000000L, active2, 0L);
+      case 101:
+         if ((active0 & 0x2000000000L) != 0L)
          {
-            jjmatchedKind = 97;
+            jjmatchedKind = 37;
             jjmatchedPos = 4;
          }
-         else if ((active1 & 0x400000000000000L) != 0L)
+         else if ((active1 & 0x800L) != 0L)
          {
-            jjmatchedKind = 122;
+            jjmatchedKind = 75;
             jjmatchedPos = 4;
          }
-         return jjMoveStringLiteralDfa5_0(active0, 0x120000000L, active1, 0x4040000014L, active2, 0L);
+         else if ((active1 & 0x1000000000L) != 0L)
+         {
+            jjmatchedKind = 100;
+            jjmatchedPos = 4;
+         }
+         else if ((active1 & 0x2000000000L) != 0L)
+         {
+            jjmatchedKind = 101;
+            jjmatchedPos = 4;
+         }
+         else if ((active1 & 0x4000000000000000L) != 0L)
+         {
+            jjmatchedKind = 126;
+            jjmatchedPos = 4;
+         }
+         return jjMoveStringLiteralDfa5_0(active0, 0x800090000000L, active1, 0x40400000140L, active2, 0L);
       case 102:
-         if ((active0 & 0x200000000L) != 0L)
+         if ((active0 & 0x100000000L) != 0L)
          {
-            jjmatchedKind = 33;
+            jjmatchedKind = 32;
             jjmatchedPos = 4;
          }
-         return jjMoveStringLiteralDfa5_0(active0, 0L, active1, 0x8000000000L, active2, 0L);
+         return jjMoveStringLiteralDfa5_0(active0, 0L, active1, 0x80000000000L, active2, 0L);
       case 103:
-         if ((active2 & 0x8000L) != 0L)
+         if ((active2 & 0x80000L) != 0L)
          {
-            jjmatchedKind = 143;
+            jjmatchedKind = 147;
             jjmatchedPos = 4;
          }
          break;
       case 104:
-         if ((active0 & 0x10000000000L) != 0L)
+         if ((active0 & 0x8000000000L) != 0L)
          {
-            jjmatchedKind = 40;
+            jjmatchedKind = 39;
             jjmatchedPos = 4;
          }
-         else if ((active1 & 0x20000000000L) != 0L)
+         else if ((active1 & 0x200000000000L) != 0L)
          {
-            jjmatchedKind = 105;
+            jjmatchedKind = 109;
             jjmatchedPos = 4;
          }
          break;
       case 105:
-         if ((active1 & 0x10000L) != 0L)
+         if ((active1 & 0x100000L) != 0L)
          {
-            jjmatchedKind = 80;
+            jjmatchedKind = 84;
             jjmatchedPos = 4;
          }
-         else if ((active1 & 0x20000L) != 0L)
+         else if ((active1 & 0x200000L) != 0L)
          {
-            jjmatchedKind = 81;
+            jjmatchedKind = 85;
             jjmatchedPos = 4;
          }
-         return jjMoveStringLiteralDfa5_0(active0, 0x200000a00000L, active1, 0L, active2, 0L);
+         return jjMoveStringLiteralDfa5_0(active0, 0x1500000500000L, active1, 0L, active2, 0L);
       case 108:
-         return jjMoveStringLiteralDfa5_0(active0, 0L, active1, 0x1L, active2, 0L);
+         return jjMoveStringLiteralDfa5_0(active0, 0x200000000000L, active1, 0x10L, active2, 0L);
       case 109:
-         return jjMoveStringLiteralDfa5_0(active0, 0L, active1, 0x108000L, active2, 0L);
+         return jjMoveStringLiteralDfa5_0(active0, 0L, active1, 0x1080000L, active2, 0L);
       case 110:
+         if ((active0 & 0x20000000000L) != 0L)
+         {
+            jjmatchedKind = 41;
+            jjmatchedPos = 4;
+         }
+         return jjMoveStringLiteralDfa5_0(active0, 0x40000000000000L, active1, 0x2020000000000L, active2, 0x1000L);
+      case 111:
+         return jjMoveStringLiteralDfa5_0(active0, 0x10000000000L, active1, 0L, active2, 0L);
+      case 112:
+         if ((active0 & 0x20000000000000L) != 0L)
+         {
+            jjmatchedKind = 53;
+            jjmatchedPos = 4;
+         }
+         return jjMoveStringLiteralDfa5_0(active0, 0L, active1, 0x28L, active2, 0L);
+      case 114:
+         if ((active0 & 0x20000000L) != 0L)
+         {
+            jjmatchedKind = 29;
+            jjmatchedPos = 4;
+         }
+         else if ((active1 & 0x40000000L) != 0L)
+         {
+            jjmatchedKind = 94;
+            jjmatchedPos = 4;
+         }
+         else if ((active2 & 0x40L) != 0L)
+         {
+            jjmatchedKind = 134;
+            jjmatchedPos = 4;
+         }
+         return jjMoveStringLiteralDfa5_0(active0, 0x80000001000000L, active1, 0L, active2, 0x1L);
+      case 115:
          if ((active0 & 0x40000000000L) != 0L)
          {
             jjmatchedKind = 42;
             jjmatchedPos = 4;
          }
-         return jjMoveStringLiteralDfa5_0(active0, 0x4000000000000L, active1, 0x202000000000L, active2, 0x100L);
-      case 111:
-         return jjMoveStringLiteralDfa5_0(active0, 0x20000000000L, active1, 0L, active2, 0L);
-      case 112:
-         if ((active0 & 0x2000000000000L) != 0L)
+         else if ((active1 & 0x800000000000L) != 0L)
          {
-            jjmatchedKind = 49;
+            jjmatchedKind = 111;
             jjmatchedPos = 4;
          }
-         return jjMoveStringLiteralDfa5_0(active0, 0x8000000000000000L, active1, 0x2L, active2, 0L);
-      case 114:
-         if ((active0 & 0x40000000L) != 0L)
-         {
-            jjmatchedKind = 30;
-            jjmatchedPos = 4;
-         }
-         else if ((active1 & 0x4000000L) != 0L)
-         {
-            jjmatchedKind = 90;
-            jjmatchedPos = 4;
-         }
-         else if ((active2 & 0x4L) != 0L)
-         {
-            jjmatchedKind = 130;
-            jjmatchedPos = 4;
-         }
-         return jjMoveStringLiteralDfa5_0(active0, 0x8000002000000L, active1, 0x1000000000000000L, active2, 0L);
-      case 115:
-         if ((active0 & 0x80000000000L) != 0L)
-         {
-            jjmatchedKind = 43;
-            jjmatchedPos = 4;
-         }
-         else if ((active1 & 0x80000000000L) != 0L)
-         {
-            jjmatchedKind = 107;
-            jjmatchedPos = 4;
-         }
-         return jjMoveStringLiteralDfa5_0(active0, 0x4000000000000000L, active1, 0L, active2, 0L);
+         return jjMoveStringLiteralDfa5_0(active0, 0L, active1, 0x4L, active2, 0L);
       case 116:
-         if ((active0 & 0x10000000L) != 0L)
+         if ((active0 & 0x8000000L) != 0L)
          {
-            jjmatchedKind = 28;
+            jjmatchedKind = 27;
             jjmatchedPos = 4;
          }
-         else if ((active0 & 0x20000000000000L) != 0L)
+         else if ((active0 & 0x200000000000000L) != 0L)
          {
-            jjmatchedKind = 53;
+            jjmatchedKind = 57;
             jjmatchedPos = 4;
          }
-         else if ((active1 & 0x1000L) != 0L)
+         else if ((active1 & 0x10000L) != 0L)
          {
-            jjmatchedKind = 76;
+            jjmatchedKind = 80;
             jjmatchedPos = 4;
          }
-         return jjMoveStringLiteralDfa5_0(active0, 0x400004000000L, active1, 0x2000101020482000L, active2, 0x8L);
+         return jjMoveStringLiteralDfa5_0(active0, 0x4000002000000L, active1, 0x1010204820000L, active2, 0x82L);
       case 117:
-         return jjMoveStringLiteralDfa5_0(active0, 0L, active1, 0x4000000000000L, active2, 0x1000L);
+         return jjMoveStringLiteralDfa5_0(active0, 0L, active1, 0x40000000000000L, active2, 0x10000L);
       case 118:
-         if ((active0 & 0x400000000000000L) != 0L)
+         if ((active0 & 0x4000000000000000L) != 0L)
          {
-            jjmatchedKind = 58;
+            jjmatchedKind = 62;
             jjmatchedPos = 4;
          }
-         return jjMoveStringLiteralDfa5_0(active0, 0x1800000000000000L, active1, 0L, active2, 0L);
+         return jjMoveStringLiteralDfa5_0(active0, 0x8000000000000000L, active1, 0x1L, active2, 0L);
       case 120:
-         if ((active1 & 0x200000L) != 0L)
+         if ((active1 & 0x2000000L) != 0L)
          {
-            jjmatchedKind = 85;
+            jjmatchedKind = 89;
             jjmatchedPos = 4;
          }
          break;
       case 122:
-         return jjMoveStringLiteralDfa5_0(active0, 0L, active1, 0x400000000000L, active2, 0L);
+         return jjMoveStringLiteralDfa5_0(active0, 0L, active1, 0x4000000000000L, active2, 0L);
       default :
          break;
    }
@@ -1355,243 +1384,267 @@
    switch(curChar)
    {
       case 50:
-         if ((active1 & 0x100000000000000L) != 0L)
+         if ((active1 & 0x1000000000000000L) != 0L)
          {
-            jjmatchedKind = 120;
+            jjmatchedKind = 124;
             jjmatchedPos = 5;
          }
          break;
       case 52:
-         if ((active1 & 0x20000000000000L) != 0L)
+         if ((active1 & 0x200000000000000L) != 0L)
          {
-            jjmatchedKind = 117;
+            jjmatchedKind = 121;
             jjmatchedPos = 5;
          }
-         else if ((active1 & 0x80000000000000L) != 0L)
+         else if ((active1 & 0x800000000000000L) != 0L)
          {
-            jjmatchedKind = 119;
+            jjmatchedKind = 123;
             jjmatchedPos = 5;
          }
          break;
       case 54:
-         if ((active1 & 0x40000000000000L) != 0L)
+         if ((active1 & 0x400000000000000L) != 0L)
          {
-            jjmatchedKind = 118;
+            jjmatchedKind = 122;
             jjmatchedPos = 5;
          }
          break;
       case 65:
-         return jjMoveStringLiteralDfa6_0(active0, 0x4008000000000000L, active1, 0x1000008000L, active2, 0L);
+         return jjMoveStringLiteralDfa6_0(active0, 0x80000000000000L, active1, 0x10000080004L, active2, 0L);
       case 67:
-         return jjMoveStringLiteralDfa6_0(active0, 0x200000000000L, active1, 0x80000000L, active2, 0L);
+         return jjMoveStringLiteralDfa6_0(active0, 0x1900000000000L, active1, 0x800000000L, active2, 0L);
       case 68:
-         return jjMoveStringLiteralDfa6_0(active0, 0L, active1, 0x202000000000L, active2, 0L);
+         return jjMoveStringLiteralDfa6_0(active0, 0L, active1, 0x2020000000000L, active2, 0L);
       case 69:
-         if ((active1 & 0x1L) != 0L)
+         if ((active0 & 0x200000000000L) != 0L)
          {
-            jjmatchedKind = 64;
+            jjmatchedKind = 45;
             jjmatchedPos = 5;
          }
-         else if ((active1 & 0x2000000000000000L) != 0L)
+         else if ((active1 & 0x10L) != 0L)
          {
-            jjmatchedKind = 125;
+            jjmatchedKind = 68;
             jjmatchedPos = 5;
          }
-         else if ((active2 & 0x8L) != 0L)
+         else if ((active2 & 0x2L) != 0L)
          {
-            jjmatchedKind = 131;
+            jjmatchedKind = 129;
             jjmatchedPos = 5;
          }
-         return jjMoveStringLiteralDfa6_0(active0, 0x1000000L, active1, 0x100400580000L, active2, 0L);
+         else if ((active2 & 0x80L) != 0L)
+         {
+            jjmatchedKind = 135;
+            jjmatchedPos = 5;
+         }
+         return jjMoveStringLiteralDfa6_0(active0, 0x800000L, active1, 0x1004005800000L, active2, 0L);
       case 70:
-         return jjMoveStringLiteralDfa6_0(active0, 0L, active1, 0x4000000000L, active2, 0L);
+         return jjMoveStringLiteralDfa6_0(active0, 0L, active1, 0x40000000000L, active2, 0L);
       case 71:
-         if ((active0 & 0x4000000000000L) != 0L)
+         if ((active0 & 0x40000000000000L) != 0L)
          {
-            jjmatchedKind = 50;
+            jjmatchedKind = 54;
             jjmatchedPos = 5;
          }
          break;
       case 73:
-         return jjMoveStringLiteralDfa6_0(active0, 0x2000000L, active1, 0x4000800000000L, active2, 0L);
+         return jjMoveStringLiteralDfa6_0(active0, 0x1000000L, active1, 0x40008000000000L, active2, 0L);
       case 76:
-         return jjMoveStringLiteralDfa6_0(active0, 0L, active1, 0L, active2, 0x1000L);
+         return jjMoveStringLiteralDfa6_0(active0, 0L, active1, 0L, active2, 0x10000L);
       case 78:
-         if ((active1 & 0x40000000L) != 0L)
+         if ((active1 & 0x400000000L) != 0L)
          {
-            jjmatchedKind = 94;
+            jjmatchedKind = 98;
             jjmatchedPos = 5;
          }
-         return jjMoveStringLiteralDfa6_0(active0, 0x2000020000800000L, active1, 0x40800L, active2, 0L);
+         return jjMoveStringLiteralDfa6_0(active0, 0x10000400000L, active1, 0x408002L, active2, 0L);
       case 79:
-         return jjMoveStringLiteralDfa6_0(active0, 0x8000000000000000L, active1, 0x400000000000L, active2, 0L);
+         return jjMoveStringLiteralDfa6_0(active0, 0L, active1, 0x4000000000008L, active2, 0L);
+      case 80:
+         return jjMoveStringLiteralDfa6_0(active0, 0x400000000000L, active1, 0L, active2, 0L);
       case 82:
-         if ((active1 & 0x4L) != 0L)
+         if ((active1 & 0x40L) != 0L)
          {
-            jjmatchedKind = 66;
+            jjmatchedKind = 70;
             jjmatchedPos = 5;
          }
-         else if ((active1 & 0x20000000L) != 0L)
+         else if ((active1 & 0x200000000L) != 0L)
          {
-            jjmatchedKind = 93;
+            jjmatchedKind = 97;
             jjmatchedPos = 5;
          }
-         return jjMoveStringLiteralDfa6_0(active0, 0x4000000L, active1, 0L, active2, 0L);
+         return jjMoveStringLiteralDfa6_0(active0, 0x2000000L, active1, 0L, active2, 0L);
       case 83:
-         if ((active0 & 0x100000000L) != 0L)
+         if ((active0 & 0x80000000L) != 0L)
          {
-            jjmatchedKind = 32;
+            jjmatchedKind = 31;
             jjmatchedPos = 5;
          }
-         else if ((active0 & 0x400000000000L) != 0L)
-         {
-            jjmatchedKind = 46;
-            jjmatchedPos = 5;
-         }
-         return jjMoveStringLiteralDfa6_0(active0, 0L, active1, 0x10L, active2, 0L);
-      case 84:
-         if ((active0 & 0x400000L) != 0L)
-         {
-            jjmatchedKind = 22;
-            jjmatchedPos = 5;
-         }
-         else if ((active0 & 0x20000000L) != 0L)
-         {
-            jjmatchedKind = 29;
-            jjmatchedPos = 5;
-         }
-         else if ((active1 & 0x10000000L) != 0L)
-         {
-            jjmatchedKind = 92;
-            jjmatchedPos = 5;
-         }
-         else if ((active1 & 0x1000000000000000L) != 0L)
-         {
-            jjmatchedKind = 124;
-            jjmatchedPos = 5;
-         }
-         else if ((active2 & 0x100L) != 0L)
-         {
-            jjmatchedKind = 136;
-            jjmatchedPos = 5;
-         }
-         return jjMoveStringLiteralDfa6_0(active0, 0L, active1, 0x8000000000L, active2, 0L);
-      case 88:
-         if ((active0 & 0x200000L) != 0L)
-         {
-            jjmatchedKind = 21;
-            jjmatchedPos = 5;
-         }
-         break;
-      case 89:
-         return jjMoveStringLiteralDfa6_0(active0, 0L, active1, 0x2000L, active2, 0L);
-      case 95:
-         return jjMoveStringLiteralDfa6_0(active0, 0x1800000000000000L, active1, 0x2L, active2, 0L);
-      case 97:
-         return jjMoveStringLiteralDfa6_0(active0, 0x4008000000000000L, active1, 0x1000008000L, active2, 0L);
-      case 99:
-         return jjMoveStringLiteralDfa6_0(active0, 0x200000000000L, active1, 0x80000000L, active2, 0L);
-      case 100:
-         return jjMoveStringLiteralDfa6_0(active0, 0L, active1, 0x202000000000L, active2, 0L);
-      case 101:
-         if ((active1 & 0x1L) != 0L)
-         {
-            jjmatchedKind = 64;
-            jjmatchedPos = 5;
-         }
-         else if ((active1 & 0x2000000000000000L) != 0L)
-         {
-            jjmatchedKind = 125;
-            jjmatchedPos = 5;
-         }
-         else if ((active2 & 0x8L) != 0L)
-         {
-            jjmatchedKind = 131;
-            jjmatchedPos = 5;
-         }
-         return jjMoveStringLiteralDfa6_0(active0, 0x1000000L, active1, 0x100400580000L, active2, 0L);
-      case 102:
-         return jjMoveStringLiteralDfa6_0(active0, 0L, active1, 0x4000000000L, active2, 0L);
-      case 103:
-         if ((active0 & 0x4000000000000L) != 0L)
+         else if ((active0 & 0x4000000000000L) != 0L)
          {
             jjmatchedKind = 50;
             jjmatchedPos = 5;
          }
-         break;
-      case 105:
-         return jjMoveStringLiteralDfa6_0(active0, 0x2000000L, active1, 0x4000800000000L, active2, 0L);
-      case 108:
-         return jjMoveStringLiteralDfa6_0(active0, 0L, active1, 0L, active2, 0x1000L);
-      case 110:
-         if ((active1 & 0x40000000L) != 0L)
-         {
-            jjmatchedKind = 94;
-            jjmatchedPos = 5;
-         }
-         return jjMoveStringLiteralDfa6_0(active0, 0x2000020000800000L, active1, 0x40800L, active2, 0L);
-      case 111:
-         return jjMoveStringLiteralDfa6_0(active0, 0x8000000000000000L, active1, 0x400000000000L, active2, 0L);
-      case 114:
-         if ((active1 & 0x4L) != 0L)
-         {
-            jjmatchedKind = 66;
-            jjmatchedPos = 5;
-         }
-         else if ((active1 & 0x20000000L) != 0L)
-         {
-            jjmatchedKind = 93;
-            jjmatchedPos = 5;
-         }
-         return jjMoveStringLiteralDfa6_0(active0, 0x4000000L, active1, 0L, active2, 0L);
-      case 115:
-         if ((active0 & 0x100000000L) != 0L)
-         {
-            jjmatchedKind = 32;
-            jjmatchedPos = 5;
-         }
-         else if ((active0 & 0x400000000000L) != 0L)
-         {
-            jjmatchedKind = 46;
-            jjmatchedPos = 5;
-         }
-         return jjMoveStringLiteralDfa6_0(active0, 0L, active1, 0x10L, active2, 0L);
-      case 116:
-         if ((active0 & 0x400000L) != 0L)
-         {
-            jjmatchedKind = 22;
-            jjmatchedPos = 5;
-         }
-         else if ((active0 & 0x20000000L) != 0L)
-         {
-            jjmatchedKind = 29;
-            jjmatchedPos = 5;
-         }
-         else if ((active1 & 0x10000000L) != 0L)
-         {
-            jjmatchedKind = 92;
-            jjmatchedPos = 5;
-         }
-         else if ((active1 & 0x1000000000000000L) != 0L)
-         {
-            jjmatchedKind = 124;
-            jjmatchedPos = 5;
-         }
-         else if ((active2 & 0x100L) != 0L)
-         {
-            jjmatchedKind = 136;
-            jjmatchedPos = 5;
-         }
-         return jjMoveStringLiteralDfa6_0(active0, 0L, active1, 0x8000000000L, active2, 0L);
-      case 120:
+         return jjMoveStringLiteralDfa6_0(active0, 0L, active1, 0x100L, active2, 0L);
+      case 84:
          if ((active0 & 0x200000L) != 0L)
          {
             jjmatchedKind = 21;
             jjmatchedPos = 5;
          }
+         else if ((active0 & 0x10000000L) != 0L)
+         {
+            jjmatchedKind = 28;
+            jjmatchedPos = 5;
+         }
+         else if ((active0 & 0x2000000000000L) != 0L)
+         {
+            jjmatchedKind = 49;
+            jjmatchedPos = 5;
+         }
+         else if ((active1 & 0x100000000L) != 0L)
+         {
+            jjmatchedKind = 96;
+            jjmatchedPos = 5;
+         }
+         else if ((active2 & 0x1L) != 0L)
+         {
+            jjmatchedKind = 128;
+            jjmatchedPos = 5;
+         }
+         else if ((active2 & 0x1000L) != 0L)
+         {
+            jjmatchedKind = 140;
+            jjmatchedPos = 5;
+         }
+         return jjMoveStringLiteralDfa6_0(active0, 0L, active1, 0x80000000000L, active2, 0L);
+      case 88:
+         if ((active0 & 0x100000L) != 0L)
+         {
+            jjmatchedKind = 20;
+            jjmatchedPos = 5;
+         }
+         break;
+      case 89:
+         return jjMoveStringLiteralDfa6_0(active0, 0L, active1, 0x20000L, active2, 0L);
+      case 95:
+         return jjMoveStringLiteralDfa6_0(active0, 0x8000000000000000L, active1, 0x21L, active2, 0L);
+      case 97:
+         return jjMoveStringLiteralDfa6_0(active0, 0x80000000000000L, active1, 0x10000080004L, active2, 0L);
+      case 99:
+         return jjMoveStringLiteralDfa6_0(active0, 0x1900000000000L, active1, 0x800000000L, active2, 0L);
+      case 100:
+         return jjMoveStringLiteralDfa6_0(active0, 0L, active1, 0x2020000000000L, active2, 0L);
+      case 101:
+         if ((active0 & 0x200000000000L) != 0L)
+         {
+            jjmatchedKind = 45;
+            jjmatchedPos = 5;
+         }
+         else if ((active1 & 0x10L) != 0L)
+         {
+            jjmatchedKind = 68;
+            jjmatchedPos = 5;
+         }
+         else if ((active2 & 0x2L) != 0L)
+         {
+            jjmatchedKind = 129;
+            jjmatchedPos = 5;
+         }
+         else if ((active2 & 0x80L) != 0L)
+         {
+            jjmatchedKind = 135;
+            jjmatchedPos = 5;
+         }
+         return jjMoveStringLiteralDfa6_0(active0, 0x800000L, active1, 0x1004005800000L, active2, 0L);
+      case 102:
+         return jjMoveStringLiteralDfa6_0(active0, 0L, active1, 0x40000000000L, active2, 0L);
+      case 103:
+         if ((active0 & 0x40000000000000L) != 0L)
+         {
+            jjmatchedKind = 54;
+            jjmatchedPos = 5;
+         }
+         break;
+      case 105:
+         return jjMoveStringLiteralDfa6_0(active0, 0x1000000L, active1, 0x40008000000000L, active2, 0L);
+      case 108:
+         return jjMoveStringLiteralDfa6_0(active0, 0L, active1, 0L, active2, 0x10000L);
+      case 110:
+         if ((active1 & 0x400000000L) != 0L)
+         {
+            jjmatchedKind = 98;
+            jjmatchedPos = 5;
+         }
+         return jjMoveStringLiteralDfa6_0(active0, 0x10000400000L, active1, 0x408002L, active2, 0L);
+      case 111:
+         return jjMoveStringLiteralDfa6_0(active0, 0L, active1, 0x4000000000008L, active2, 0L);
+      case 112:
+         return jjMoveStringLiteralDfa6_0(active0, 0x400000000000L, active1, 0L, active2, 0L);
+      case 114:
+         if ((active1 & 0x40L) != 0L)
+         {
+            jjmatchedKind = 70;
+            jjmatchedPos = 5;
+         }
+         else if ((active1 & 0x200000000L) != 0L)
+         {
+            jjmatchedKind = 97;
+            jjmatchedPos = 5;
+         }
+         return jjMoveStringLiteralDfa6_0(active0, 0x2000000L, active1, 0L, active2, 0L);
+      case 115:
+         if ((active0 & 0x80000000L) != 0L)
+         {
+            jjmatchedKind = 31;
+            jjmatchedPos = 5;
+         }
+         else if ((active0 & 0x4000000000000L) != 0L)
+         {
+            jjmatchedKind = 50;
+            jjmatchedPos = 5;
+         }
+         return jjMoveStringLiteralDfa6_0(active0, 0L, active1, 0x100L, active2, 0L);
+      case 116:
+         if ((active0 & 0x200000L) != 0L)
+         {
+            jjmatchedKind = 21;
+            jjmatchedPos = 5;
+         }
+         else if ((active0 & 0x10000000L) != 0L)
+         {
+            jjmatchedKind = 28;
+            jjmatchedPos = 5;
+         }
+         else if ((active0 & 0x2000000000000L) != 0L)
+         {
+            jjmatchedKind = 49;
+            jjmatchedPos = 5;
+         }
+         else if ((active1 & 0x100000000L) != 0L)
+         {
+            jjmatchedKind = 96;
+            jjmatchedPos = 5;
+         }
+         else if ((active2 & 0x1L) != 0L)
+         {
+            jjmatchedKind = 128;
+            jjmatchedPos = 5;
+         }
+         else if ((active2 & 0x1000L) != 0L)
+         {
+            jjmatchedKind = 140;
+            jjmatchedPos = 5;
+         }
+         return jjMoveStringLiteralDfa6_0(active0, 0L, active1, 0x80000000000L, active2, 0L);
+      case 120:
+         if ((active0 & 0x100000L) != 0L)
+         {
+            jjmatchedKind = 20;
+            jjmatchedPos = 5;
+         }
          break;
       case 121:
-         return jjMoveStringLiteralDfa6_0(active0, 0L, active1, 0x2000L, active2, 0L);
+         return jjMoveStringLiteralDfa6_0(active0, 0L, active1, 0x20000L, active2, 0L);
       default :
          break;
    }
@@ -1607,177 +1660,191 @@
    switch(curChar)
    {
       case 65:
-         return jjMoveStringLiteralDfa7_0(active0, 0x20000000000L, active1, 0L, active2, 0L);
+         return jjMoveStringLiteralDfa7_0(active0, 0x1010000000000L, active1, 0L, active2, 0L);
       case 66:
-         return jjMoveStringLiteralDfa7_0(active0, 0x2000000L, active1, 0L, active2, 0L);
+         return jjMoveStringLiteralDfa7_0(active0, 0x1000000L, active1, 0L, active2, 0L);
       case 67:
-         return jjMoveStringLiteralDfa7_0(active0, 0x2000000000800000L, active1, 0x12L, active2, 0L);
+         return jjMoveStringLiteralDfa7_0(active0, 0x400000L, active1, 0x122L, active2, 0L);
       case 68:
-         if ((active0 & 0x1000000L) != 0L)
+         if ((active0 & 0x800000L) != 0L)
          {
-            jjmatchedKind = 24;
+            jjmatchedKind = 23;
             jjmatchedPos = 6;
          }
-         else if ((active1 & 0x4000000000000L) != 0L)
+         else if ((active1 & 0x40000000000000L) != 0L)
          {
-            jjmatchedKind = 114;
+            jjmatchedKind = 118;
             jjmatchedPos = 6;
          }
          break;
       case 69:
-         if ((active0 & 0x200000000000L) != 0L)
+         if ((active0 & 0x100000000000L) != 0L)
          {
-            jjmatchedKind = 45;
+            jjmatchedKind = 44;
             jjmatchedPos = 6;
          }
-         else if ((active1 & 0x80000000L) != 0L)
+         else if ((active1 & 0x800000000L) != 0L)
          {
-            jjmatchedKind = 95;
+            jjmatchedKind = 99;
             jjmatchedPos = 6;
          }
-         return jjMoveStringLiteralDfa7_0(active0, 0L, active1, 0x8000000000L, active2, 0L);
+         return jjMoveStringLiteralDfa7_0(active0, 0L, active1, 0x80000000000L, active2, 0L);
       case 71:
-         if ((active1 & 0x800L) != 0L)
+         if ((active1 & 0x8000L) != 0L)
          {
-            jjmatchedKind = 75;
+            jjmatchedKind = 79;
             jjmatchedPos = 6;
          }
          break;
       case 75:
-         if ((active1 & 0x40000L) != 0L)
+         if ((active1 & 0x400000L) != 0L)
          {
-            jjmatchedKind = 82;
+            jjmatchedKind = 86;
             jjmatchedPos = 6;
          }
          break;
+      case 76:
+         return jjMoveStringLiteralDfa7_0(active0, 0x400000000000L, active1, 0L, active2, 0L);
       case 77:
-         return jjMoveStringLiteralDfa7_0(active0, 0x4000000000000000L, active1, 0L, active2, 0L);
+         return jjMoveStringLiteralDfa7_0(active0, 0L, active1, 0x4L, active2, 0L);
       case 78:
-         return jjMoveStringLiteralDfa7_0(active0, 0L, active1, 0x400800000000L, active2, 0L);
+         return jjMoveStringLiteralDfa7_0(active0, 0L, active1, 0x4008000000000L, active2, 0L);
       case 79:
-         return jjMoveStringLiteralDfa7_0(active0, 0L, active1, 0x4000000000L, active2, 0L);
+         return jjMoveStringLiteralDfa7_0(active0, 0L, active1, 0x40000000000L, active2, 0L);
       case 80:
-         if ((active0 & 0x8000000000000000L) != 0L)
+         if ((active1 & 0x8L) != 0L)
          {
-            jjmatchedKind = 63;
+            jjmatchedKind = 67;
             jjmatchedPos = 6;
          }
-         return jjMoveStringLiteralDfa7_0(active0, 0x1000000000000000L, active1, 0x2000L, active2, 0L);
+         return jjMoveStringLiteralDfa7_0(active0, 0L, active1, 0x20001L, active2, 0L);
       case 82:
-         return jjMoveStringLiteralDfa7_0(active0, 0L, active1, 0x1000580000L, active2, 0L);
+         return jjMoveStringLiteralDfa7_0(active0, 0L, active1, 0x10005800000L, active2, 0L);
       case 83:
-         if ((active1 & 0x2000000000L) != 0L)
+         if ((active1 & 0x20000000000L) != 0L)
          {
-            jjmatchedKind = 101;
+            jjmatchedKind = 105;
             jjmatchedPos = 6;
          }
-         else if ((active1 & 0x100000000000L) != 0L)
+         else if ((active1 & 0x1000000000000L) != 0L)
          {
-            jjmatchedKind = 108;
+            jjmatchedKind = 112;
             jjmatchedPos = 6;
          }
-         else if ((active1 & 0x200000000000L) != 0L)
+         else if ((active1 & 0x2000000000000L) != 0L)
          {
-            jjmatchedKind = 109;
+            jjmatchedKind = 113;
             jjmatchedPos = 6;
          }
-         return jjMoveStringLiteralDfa7_0(active0, 0x800000000000000L, active1, 0L, active2, 0L);
+         return jjMoveStringLiteralDfa7_0(active0, 0x8000000000000000L, active1, 0L, active2, 0L);
       case 84:
-         if ((active2 & 0x1000L) != 0L)
+         if ((active0 & 0x800000000000L) != 0L)
          {
-            jjmatchedKind = 140;
+            jjmatchedKind = 47;
             jjmatchedPos = 6;
          }
-         return jjMoveStringLiteralDfa7_0(active0, 0x8000000000000L, active1, 0x8000L, active2, 0L);
+         else if ((active2 & 0x10000L) != 0L)
+         {
+            jjmatchedKind = 144;
+            jjmatchedPos = 6;
+         }
+         return jjMoveStringLiteralDfa7_0(active0, 0x80000000000000L, active1, 0x80000L, active2, 0L);
       case 85:
-         return jjMoveStringLiteralDfa7_0(active0, 0x4000000L, active1, 0L, active2, 0L);
-      case 95:
-         return jjMoveStringLiteralDfa7_0(active0, 0L, active1, 0x400000000L, active2, 0L);
-      case 97:
-         return jjMoveStringLiteralDfa7_0(active0, 0x20000000000L, active1, 0L, active2, 0L);
-      case 98:
          return jjMoveStringLiteralDfa7_0(active0, 0x2000000L, active1, 0L, active2, 0L);
+      case 95:
+         return jjMoveStringLiteralDfa7_0(active0, 0L, active1, 0x4000000000L, active2, 0L);
+      case 97:
+         return jjMoveStringLiteralDfa7_0(active0, 0x1010000000000L, active1, 0L, active2, 0L);
+      case 98:
+         return jjMoveStringLiteralDfa7_0(active0, 0x1000000L, active1, 0L, active2, 0L);
       case 99:
-         return jjMoveStringLiteralDfa7_0(active0, 0x2000000000800000L, active1, 0x12L, active2, 0L);
+         return jjMoveStringLiteralDfa7_0(active0, 0x400000L, active1, 0x122L, active2, 0L);
       case 100:
-         if ((active0 & 0x1000000L) != 0L)
+         if ((active0 & 0x800000L) != 0L)
          {
-            jjmatchedKind = 24;
+            jjmatchedKind = 23;
             jjmatchedPos = 6;
          }
-         else if ((active1 & 0x4000000000000L) != 0L)
+         else if ((active1 & 0x40000000000000L) != 0L)
          {
-            jjmatchedKind = 114;
+            jjmatchedKind = 118;
             jjmatchedPos = 6;
          }
          break;
       case 101:
-         if ((active0 & 0x200000000000L) != 0L)
+         if ((active0 & 0x100000000000L) != 0L)
          {
-            jjmatchedKind = 45;
+            jjmatchedKind = 44;
             jjmatchedPos = 6;
          }
-         else if ((active1 & 0x80000000L) != 0L)
+         else if ((active1 & 0x800000000L) != 0L)
          {
-            jjmatchedKind = 95;
+            jjmatchedKind = 99;
             jjmatchedPos = 6;
          }
-         return jjMoveStringLiteralDfa7_0(active0, 0L, active1, 0x8000000000L, active2, 0L);
+         return jjMoveStringLiteralDfa7_0(active0, 0L, active1, 0x80000000000L, active2, 0L);
       case 103:
-         if ((active1 & 0x800L) != 0L)
+         if ((active1 & 0x8000L) != 0L)
          {
-            jjmatchedKind = 75;
+            jjmatchedKind = 79;
             jjmatchedPos = 6;
          }
          break;
       case 107:
-         if ((active1 & 0x40000L) != 0L)
+         if ((active1 & 0x400000L) != 0L)
          {
-            jjmatchedKind = 82;
+            jjmatchedKind = 86;
             jjmatchedPos = 6;
          }
          break;
+      case 108:
+         return jjMoveStringLiteralDfa7_0(active0, 0x400000000000L, active1, 0L, active2, 0L);
       case 109:
-         return jjMoveStringLiteralDfa7_0(active0, 0x4000000000000000L, active1, 0L, active2, 0L);
+         return jjMoveStringLiteralDfa7_0(active0, 0L, active1, 0x4L, active2, 0L);
       case 110:
-         return jjMoveStringLiteralDfa7_0(active0, 0L, active1, 0x400800000000L, active2, 0L);
+         return jjMoveStringLiteralDfa7_0(active0, 0L, active1, 0x4008000000000L, active2, 0L);
       case 111:
-         return jjMoveStringLiteralDfa7_0(active0, 0L, active1, 0x4000000000L, active2, 0L);
+         return jjMoveStringLiteralDfa7_0(active0, 0L, active1, 0x40000000000L, active2, 0L);
       case 112:
-         if ((active0 & 0x8000000000000000L) != 0L)
+         if ((active1 & 0x8L) != 0L)
          {
-            jjmatchedKind = 63;
+            jjmatchedKind = 67;
             jjmatchedPos = 6;
          }
-         return jjMoveStringLiteralDfa7_0(active0, 0x1000000000000000L, active1, 0x2000L, active2, 0L);
+         return jjMoveStringLiteralDfa7_0(active0, 0L, active1, 0x20001L, active2, 0L);
       case 114:
-         return jjMoveStringLiteralDfa7_0(active0, 0L, active1, 0x1000580000L, active2, 0L);
+         return jjMoveStringLiteralDfa7_0(active0, 0L, active1, 0x10005800000L, active2, 0L);
       case 115:
-         if ((active1 & 0x2000000000L) != 0L)
+         if ((active1 & 0x20000000000L) != 0L)
          {
-            jjmatchedKind = 101;
+            jjmatchedKind = 105;
             jjmatchedPos = 6;
          }
-         else if ((active1 & 0x100000000000L) != 0L)
+         else if ((active1 & 0x1000000000000L) != 0L)
          {
-            jjmatchedKind = 108;
+            jjmatchedKind = 112;
             jjmatchedPos = 6;
          }
-         else if ((active1 & 0x200000000000L) != 0L)
+         else if ((active1 & 0x2000000000000L) != 0L)
          {
-            jjmatchedKind = 109;
+            jjmatchedKind = 113;
             jjmatchedPos = 6;
          }
-         return jjMoveStringLiteralDfa7_0(active0, 0x800000000000000L, active1, 0L, active2, 0L);
+         return jjMoveStringLiteralDfa7_0(active0, 0x8000000000000000L, active1, 0L, active2, 0L);
       case 116:
-         if ((active2 & 0x1000L) != 0L)
+         if ((active0 & 0x800000000000L) != 0L)
          {
-            jjmatchedKind = 140;
+            jjmatchedKind = 47;
             jjmatchedPos = 6;
          }
-         return jjMoveStringLiteralDfa7_0(active0, 0x8000000000000L, active1, 0x8000L, active2, 0L);
+         else if ((active2 & 0x10000L) != 0L)
+         {
+            jjmatchedKind = 144;
+            jjmatchedPos = 6;
+         }
+         return jjMoveStringLiteralDfa7_0(active0, 0x80000000000000L, active1, 0x80000L, active2, 0L);
       case 117:
-         return jjMoveStringLiteralDfa7_0(active0, 0x4000000L, active1, 0L, active2, 0L);
+         return jjMoveStringLiteralDfa7_0(active0, 0x2000000L, active1, 0L, active2, 0L);
       default :
          break;
    }
@@ -1793,163 +1860,173 @@
    switch(curChar)
    {
       case 65:
-         return jjMoveStringLiteralDfa8_0(active0, 0x800000000000000L, active1, 0x80000L);
+         return jjMoveStringLiteralDfa8_0(active0, 0x8000000000000000L, active1, 0x800000L);
       case 67:
-         return jjMoveStringLiteralDfa8_0(active0, 0x4000000L, active1, 0x8000L);
+         return jjMoveStringLiteralDfa8_0(active0, 0x2000000L, active1, 0x80000L);
       case 69:
-         if ((active0 & 0x2000000L) != 0L)
+         if ((active0 & 0x1000000L) != 0L)
          {
-            jjmatchedKind = 25;
+            jjmatchedKind = 24;
             jjmatchedPos = 7;
          }
-         else if ((active0 & 0x2000000000000000L) != 0L)
+         else if ((active0 & 0x400000000000L) != 0L)
          {
-            jjmatchedKind = 61;
+            jjmatchedKind = 46;
             jjmatchedPos = 7;
          }
-         else if ((active1 & 0x10L) != 0L)
+         else if ((active1 & 0x2L) != 0L)
          {
-            jjmatchedKind = 68;
+            jjmatchedKind = 65;
             jjmatchedPos = 7;
          }
-         else if ((active1 & 0x2000L) != 0L)
+         else if ((active1 & 0x100L) != 0L)
          {
-            jjmatchedKind = 77;
+            jjmatchedKind = 72;
             jjmatchedPos = 7;
          }
-         else if ((active1 & 0x400000000000L) != 0L)
+         else if ((active1 & 0x20000L) != 0L)
          {
-            jjmatchedKind = 110;
+            jjmatchedKind = 81;
+            jjmatchedPos = 7;
+         }
+         else if ((active1 & 0x4000000000000L) != 0L)
+         {
+            jjmatchedKind = 114;
             jjmatchedPos = 7;
          }
          break;
       case 70:
-         return jjMoveStringLiteralDfa8_0(active0, 0L, active1, 0x400000000L);
+         return jjMoveStringLiteralDfa8_0(active0, 0L, active1, 0x4000000000L);
       case 73:
-         return jjMoveStringLiteralDfa8_0(active0, 0L, active1, 0x100000L);
+         return jjMoveStringLiteralDfa8_0(active0, 0L, active1, 0x1000000L);
       case 76:
-         if ((active0 & 0x20000000000L) != 0L)
+         if ((active0 & 0x10000000000L) != 0L)
          {
-            jjmatchedKind = 41;
+            jjmatchedKind = 40;
             jjmatchedPos = 7;
          }
          break;
       case 77:
-         if ((active1 & 0x400000L) != 0L)
+         if ((active1 & 0x4000000L) != 0L)
          {
-            jjmatchedKind = 86;
+            jjmatchedKind = 90;
             jjmatchedPos = 7;
          }
          break;
       case 79:
-         return jjMoveStringLiteralDfa8_0(active0, 0x1008000000000000L, active1, 0x2L);
+         return jjMoveStringLiteralDfa8_0(active0, 0x80000000000000L, active1, 0x21L);
       case 80:
-         if ((active0 & 0x4000000000000000L) != 0L)
+         if ((active1 & 0x4L) != 0L)
          {
-            jjmatchedKind = 62;
+            jjmatchedKind = 66;
             jjmatchedPos = 7;
          }
          break;
       case 82:
+         if ((active1 & 0x80000000000L) != 0L)
+         {
+            jjmatchedKind = 107;
+            jjmatchedPos = 7;
+         }
+         return jjMoveStringLiteralDfa8_0(active0, 0L, active1, 0x40000000000L);
+      case 83:
          if ((active1 & 0x8000000000L) != 0L)
          {
             jjmatchedKind = 103;
             jjmatchedPos = 7;
          }
-         return jjMoveStringLiteralDfa8_0(active0, 0L, active1, 0x4000000000L);
-      case 83:
-         if ((active1 & 0x800000000L) != 0L)
-         {
-            jjmatchedKind = 99;
-            jjmatchedPos = 7;
-         }
          break;
       case 84:
-         if ((active0 & 0x800000L) != 0L)
+         if ((active0 & 0x400000L) != 0L)
          {
-            jjmatchedKind = 23;
+            jjmatchedKind = 22;
             jjmatchedPos = 7;
          }
-         return jjMoveStringLiteralDfa8_0(active0, 0L, active1, 0x1000000000L);
+         return jjMoveStringLiteralDfa8_0(active0, 0x1000000000000L, active1, 0x10000000000L);
       case 97:
-         return jjMoveStringLiteralDfa8_0(active0, 0x800000000000000L, active1, 0x80000L);
+         return jjMoveStringLiteralDfa8_0(active0, 0x8000000000000000L, active1, 0x800000L);
       case 99:
-         return jjMoveStringLiteralDfa8_0(active0, 0x4000000L, active1, 0x8000L);
+         return jjMoveStringLiteralDfa8_0(active0, 0x2000000L, active1, 0x80000L);
       case 101:
-         if ((active0 & 0x2000000L) != 0L)
+         if ((active0 & 0x1000000L) != 0L)
          {
-            jjmatchedKind = 25;
+            jjmatchedKind = 24;
             jjmatchedPos = 7;
          }
-         else if ((active0 & 0x2000000000000000L) != 0L)
+         else if ((active0 & 0x400000000000L) != 0L)
          {
-            jjmatchedKind = 61;
+            jjmatchedKind = 46;
             jjmatchedPos = 7;
          }
-         else if ((active1 & 0x10L) != 0L)
+         else if ((active1 & 0x2L) != 0L)
          {
-            jjmatchedKind = 68;
+            jjmatchedKind = 65;
             jjmatchedPos = 7;
          }
-         else if ((active1 & 0x2000L) != 0L)
+         else if ((active1 & 0x100L) != 0L)
          {
-            jjmatchedKind = 77;
+            jjmatchedKind = 72;
             jjmatchedPos = 7;
          }
-         else if ((active1 & 0x400000000000L) != 0L)
+         else if ((active1 & 0x20000L) != 0L)
          {
-            jjmatchedKind = 110;
+            jjmatchedKind = 81;
+            jjmatchedPos = 7;
+         }
+         else if ((active1 & 0x4000000000000L) != 0L)
+         {
+            jjmatchedKind = 114;
             jjmatchedPos = 7;
          }
          break;
       case 102:
-         return jjMoveStringLiteralDfa8_0(active0, 0L, active1, 0x400000000L);
+         return jjMoveStringLiteralDfa8_0(active0, 0L, active1, 0x4000000000L);
       case 105:
-         return jjMoveStringLiteralDfa8_0(active0, 0L, active1, 0x100000L);
+         return jjMoveStringLiteralDfa8_0(active0, 0L, active1, 0x1000000L);
       case 108:
-         if ((active0 & 0x20000000000L) != 0L)
+         if ((active0 & 0x10000000000L) != 0L)
          {
-            jjmatchedKind = 41;
+            jjmatchedKind = 40;
             jjmatchedPos = 7;
          }
          break;
       case 109:
-         if ((active1 & 0x400000L) != 0L)
+         if ((active1 & 0x4000000L) != 0L)
          {
-            jjmatchedKind = 86;
+            jjmatchedKind = 90;
             jjmatchedPos = 7;
          }
          break;
       case 111:
-         return jjMoveStringLiteralDfa8_0(active0, 0x1008000000000000L, active1, 0x2L);
+         return jjMoveStringLiteralDfa8_0(active0, 0x80000000000000L, active1, 0x21L);
       case 112:
-         if ((active0 & 0x4000000000000000L) != 0L)
+         if ((active1 & 0x4L) != 0L)
          {
-            jjmatchedKind = 62;
+            jjmatchedKind = 66;
             jjmatchedPos = 7;
          }
          break;
       case 114:
+         if ((active1 & 0x80000000000L) != 0L)
+         {
+            jjmatchedKind = 107;
+            jjmatchedPos = 7;
+         }
+         return jjMoveStringLiteralDfa8_0(active0, 0L, active1, 0x40000000000L);
+      case 115:
          if ((active1 & 0x8000000000L) != 0L)
          {
             jjmatchedKind = 103;
             jjmatchedPos = 7;
          }
-         return jjMoveStringLiteralDfa8_0(active0, 0L, active1, 0x4000000000L);
-      case 115:
-         if ((active1 & 0x800000000L) != 0L)
-         {
-            jjmatchedKind = 99;
-            jjmatchedPos = 7;
-         }
          break;
       case 116:
-         if ((active0 & 0x800000L) != 0L)
+         if ((active0 & 0x400000L) != 0L)
          {
-            jjmatchedKind = 23;
+            jjmatchedKind = 22;
             jjmatchedPos = 7;
          }
-         return jjMoveStringLiteralDfa8_0(active0, 0L, active1, 0x1000000000L);
+         return jjMoveStringLiteralDfa8_0(active0, 0x1000000000000L, active1, 0x10000000000L);
       default :
          break;
    }
@@ -1965,116 +2042,126 @@
    switch(curChar)
    {
       case 67:
-         if ((active1 & 0x100000L) != 0L)
+         if ((active1 & 0x1000000L) != 0L)
          {
-            jjmatchedKind = 84;
+            jjmatchedKind = 88;
             jjmatchedPos = 8;
          }
          break;
       case 69:
-         if ((active1 & 0x4000000000L) != 0L)
+         if ((active0 & 0x1000000000000L) != 0L)
          {
-            jjmatchedKind = 102;
+            jjmatchedKind = 48;
+            jjmatchedPos = 8;
+         }
+         else if ((active1 & 0x40000000000L) != 0L)
+         {
+            jjmatchedKind = 106;
             jjmatchedPos = 8;
          }
          break;
       case 72:
-         return jjMoveStringLiteralDfa9_0(active0, 0L, active1, 0x8000L);
+         return jjMoveStringLiteralDfa9_0(active0, 0L, active1, 0x80000L);
       case 76:
-         if ((active1 & 0x80000L) != 0L)
+         if ((active1 & 0x800000L) != 0L)
          {
-            jjmatchedKind = 83;
+            jjmatchedKind = 87;
             jjmatchedPos = 8;
          }
          break;
       case 77:
-         return jjMoveStringLiteralDfa9_0(active0, 0x800000000000000L, active1, 0L);
+         return jjMoveStringLiteralDfa9_0(active0, 0x8000000000000000L, active1, 0L);
       case 78:
-         return jjMoveStringLiteralDfa9_0(active0, 0L, active1, 0x2L);
+         return jjMoveStringLiteralDfa9_0(active0, 0L, active1, 0x20L);
       case 79:
-         return jjMoveStringLiteralDfa9_0(active0, 0L, active1, 0x400000000L);
+         return jjMoveStringLiteralDfa9_0(active0, 0L, active1, 0x4000000000L);
       case 80:
-         if ((active0 & 0x1000000000000000L) != 0L)
+         if ((active1 & 0x1L) != 0L)
          {
-            jjmatchedKind = 60;
+            jjmatchedKind = 64;
             jjmatchedPos = 8;
          }
          break;
       case 82:
-         if ((active0 & 0x8000000000000L) != 0L)
+         if ((active0 & 0x80000000000000L) != 0L)
          {
-            jjmatchedKind = 51;
+            jjmatchedKind = 55;
             jjmatchedPos = 8;
          }
          break;
       case 83:
-         if ((active1 & 0x1000000000L) != 0L)
+         if ((active1 & 0x10000000000L) != 0L)
          {
-            jjmatchedKind = 100;
+            jjmatchedKind = 104;
             jjmatchedPos = 8;
          }
          break;
       case 84:
-         if ((active0 & 0x4000000L) != 0L)
+         if ((active0 & 0x2000000L) != 0L)
          {
-            jjmatchedKind = 26;
+            jjmatchedKind = 25;
             jjmatchedPos = 8;
          }
          break;
       case 99:
-         if ((active1 & 0x100000L) != 0L)
+         if ((active1 & 0x1000000L) != 0L)
          {
-            jjmatchedKind = 84;
+            jjmatchedKind = 88;
             jjmatchedPos = 8;
          }
          break;
       case 101:
-         if ((active1 & 0x4000000000L) != 0L)
+         if ((active0 & 0x1000000000000L) != 0L)
          {
-            jjmatchedKind = 102;
+            jjmatchedKind = 48;
+            jjmatchedPos = 8;
+         }
+         else if ((active1 & 0x40000000000L) != 0L)
+         {
+            jjmatchedKind = 106;
             jjmatchedPos = 8;
          }
          break;
       case 104:
-         return jjMoveStringLiteralDfa9_0(active0, 0L, active1, 0x8000L);
+         return jjMoveStringLiteralDfa9_0(active0, 0L, active1, 0x80000L);
       case 108:
-         if ((active1 & 0x80000L) != 0L)
+         if ((active1 & 0x800000L) != 0L)
          {
-            jjmatchedKind = 83;
+            jjmatchedKind = 87;
             jjmatchedPos = 8;
          }
          break;
       case 109:
-         return jjMoveStringLiteralDfa9_0(active0, 0x800000000000000L, active1, 0L);
+         return jjMoveStringLiteralDfa9_0(active0, 0x8000000000000000L, active1, 0L);
       case 110:
-         return jjMoveStringLiteralDfa9_0(active0, 0L, active1, 0x2L);
+         return jjMoveStringLiteralDfa9_0(active0, 0L, active1, 0x20L);
       case 111:
-         return jjMoveStringLiteralDfa9_0(active0, 0L, active1, 0x400000000L);
+         return jjMoveStringLiteralDfa9_0(active0, 0L, active1, 0x4000000000L);
       case 112:
-         if ((active0 & 0x1000000000000000L) != 0L)
+         if ((active1 & 0x1L) != 0L)
          {
-            jjmatchedKind = 60;
+            jjmatchedKind = 64;
             jjmatchedPos = 8;
          }
          break;
       case 114:
-         if ((active0 & 0x8000000000000L) != 0L)
+         if ((active0 & 0x80000000000000L) != 0L)
          {
-            jjmatchedKind = 51;
+            jjmatchedKind = 55;
             jjmatchedPos = 8;
          }
          break;
       case 115:
-         if ((active1 & 0x1000000000L) != 0L)
+         if ((active1 & 0x10000000000L) != 0L)
          {
-            jjmatchedKind = 100;
+            jjmatchedKind = 104;
             jjmatchedPos = 8;
          }
          break;
       case 116:
-         if ((active0 & 0x4000000L) != 0L)
+         if ((active0 & 0x2000000L) != 0L)
          {
-            jjmatchedKind = 26;
+            jjmatchedKind = 25;
             jjmatchedPos = 8;
          }
          break;
@@ -2093,31 +2180,31 @@
    switch(curChar)
    {
       case 67:
-         return jjMoveStringLiteralDfa10_0(active0, 0L, active1, 0x2L);
+         return jjMoveStringLiteralDfa10_0(active0, 0L, active1, 0x20L);
       case 69:
-         return jjMoveStringLiteralDfa10_0(active0, 0L, active1, 0x8000L);
+         return jjMoveStringLiteralDfa10_0(active0, 0L, active1, 0x80000L);
       case 80:
-         if ((active0 & 0x800000000000000L) != 0L)
+         if ((active0 & 0x8000000000000000L) != 0L)
          {
-            jjmatchedKind = 59;
+            jjmatchedKind = 63;
             jjmatchedPos = 9;
          }
          break;
       case 82:
-         return jjMoveStringLiteralDfa10_0(active0, 0L, active1, 0x400000000L);
+         return jjMoveStringLiteralDfa10_0(active0, 0L, active1, 0x4000000000L);
       case 99:
-         return jjMoveStringLiteralDfa10_0(active0, 0L, active1, 0x2L);
+         return jjMoveStringLiteralDfa10_0(active0, 0L, active1, 0x20L);
       case 101:
-         return jjMoveStringLiteralDfa10_0(active0, 0L, active1, 0x8000L);
+         return jjMoveStringLiteralDfa10_0(active0, 0L, active1, 0x80000L);
       case 112:
-         if ((active0 & 0x800000000000000L) != 0L)
+         if ((active0 & 0x8000000000000000L) != 0L)
          {
-            jjmatchedKind = 59;
+            jjmatchedKind = 63;
             jjmatchedPos = 9;
          }
          break;
       case 114:
-         return jjMoveStringLiteralDfa10_0(active0, 0L, active1, 0x400000000L);
+         return jjMoveStringLiteralDfa10_0(active0, 0L, active1, 0x4000000000L);
       default :
          break;
    }
@@ -2133,22 +2220,22 @@
    switch(curChar)
    {
       case 65:
-         return jjMoveStringLiteralDfa11_0(active1, 0x2L);
+         return jjMoveStringLiteralDfa11_0(active1, 0x20L);
       case 83:
-         if ((active1 & 0x8000L) != 0L)
+         if ((active1 & 0x80000L) != 0L)
          {
-            jjmatchedKind = 79;
+            jjmatchedKind = 83;
             jjmatchedPos = 10;
          }
          break;
       case 95:
-         return jjMoveStringLiteralDfa11_0(active1, 0x400000000L);
+         return jjMoveStringLiteralDfa11_0(active1, 0x4000000000L);
       case 97:
-         return jjMoveStringLiteralDfa11_0(active1, 0x2L);
+         return jjMoveStringLiteralDfa11_0(active1, 0x20L);
       case 115:
-         if ((active1 & 0x8000L) != 0L)
+         if ((active1 & 0x80000L) != 0L)
          {
-            jjmatchedKind = 79;
+            jjmatchedKind = 83;
             jjmatchedPos = 10;
          }
          break;
@@ -2167,23 +2254,23 @@
    switch(curChar)
    {
       case 84:
-         if ((active1 & 0x2L) != 0L)
+         if ((active1 & 0x20L) != 0L)
          {
-            jjmatchedKind = 65;
+            jjmatchedKind = 69;
             jjmatchedPos = 11;
          }
          break;
       case 85:
-         return jjMoveStringLiteralDfa12_0(active1, 0x400000000L);
+         return jjMoveStringLiteralDfa12_0(active1, 0x4000000000L);
       case 116:
-         if ((active1 & 0x2L) != 0L)
+         if ((active1 & 0x20L) != 0L)
          {
-            jjmatchedKind = 65;
+            jjmatchedKind = 69;
             jjmatchedPos = 11;
          }
          break;
       case 117:
-         return jjMoveStringLiteralDfa12_0(active1, 0x400000000L);
+         return jjMoveStringLiteralDfa12_0(active1, 0x4000000000L);
       default :
          break;
    }
@@ -2199,9 +2286,9 @@
    switch(curChar)
    {
       case 82:
-         return jjMoveStringLiteralDfa13_0(active1, 0x400000000L);
+         return jjMoveStringLiteralDfa13_0(active1, 0x4000000000L);
       case 114:
-         return jjMoveStringLiteralDfa13_0(active1, 0x400000000L);
+         return jjMoveStringLiteralDfa13_0(active1, 0x4000000000L);
       default :
          break;
    }
@@ -2217,16 +2304,16 @@
    switch(curChar)
    {
       case 73:
-         if ((active1 & 0x400000000L) != 0L)
+         if ((active1 & 0x4000000000L) != 0L)
          {
-            jjmatchedKind = 98;
+            jjmatchedKind = 102;
             jjmatchedPos = 13;
          }
          break;
       case 105:
-         if ((active1 & 0x400000000L) != 0L)
+         if ((active1 & 0x4000000000L) != 0L)
          {
-            jjmatchedKind = 98;
+            jjmatchedKind = 102;
             jjmatchedPos = 13;
          }
          break;
@@ -2299,8 +2386,8 @@
                case 0:
                   if ((0x3ff000000000000L & l) != 0L)
                   {
-                     if (kind > 145)
-                        kind = 145;
+                     if (kind > 149)
+                        kind = 149;
                      { jjCheckNAddStates(0, 6); }
                   }
                   else if (curChar == 45)
@@ -2311,8 +2398,8 @@
                      { jjCheckNAddTwoStates(195, 207); }
                   else if (curChar == 58)
                   {
-                     if (kind > 11)
-                        kind = 11;
+                     if (kind > 10)
+                        kind = 10;
                      { jjCheckNAddStates(17, 19); }
                   }
                   else if (curChar == 40)
@@ -2398,8 +2485,8 @@
                      { jjCheckNAddStates(23, 25); }
                   break;
                case 17:
-                  if (curChar == 62 && kind > 10)
-                     kind = 10;
+                  if (curChar == 62 && kind > 9)
+                     kind = 9;
                   break;
                case 18:
                   if (curChar == 58)
@@ -2408,8 +2495,8 @@
                case 19:
                   if ((0x3ff000000000000L & l) == 0L)
                      break;
-                  if (kind > 13)
-                     kind = 13;
+                  if (kind > 12)
+                     kind = 12;
                   { jjCheckNAddTwoStates(20, 21); }
                   break;
                case 20:
@@ -2417,8 +2504,8 @@
                      { jjCheckNAddTwoStates(20, 21); }
                   break;
                case 21:
-                  if ((0x3ff200000000000L & l) != 0L && kind > 13)
-                     kind = 13;
+                  if ((0x3ff200000000000L & l) != 0L && kind > 12)
+                     kind = 12;
                   break;
                case 23:
                   if (curChar == 63)
@@ -2428,8 +2515,8 @@
                case 25:
                   if ((0x3ff000000000000L & l) == 0L)
                      break;
-                  if (kind > 14)
-                     kind = 14;
+                  if (kind > 13)
+                     kind = 13;
                   { jjCheckNAdd(25); }
                   break;
                case 26:
@@ -2440,8 +2527,8 @@
                case 28:
                   if ((0x3ff000000000000L & l) == 0L)
                      break;
-                  if (kind > 15)
-                     kind = 15;
+                  if (kind > 14)
+                     kind = 14;
                   { jjCheckNAdd(28); }
                   break;
                case 31:
@@ -2451,8 +2538,8 @@
                case 32:
                   if ((0x3ff000000000000L & l) == 0L)
                      break;
-                  if (kind > 16)
-                     kind = 16;
+                  if (kind > 15)
+                     kind = 15;
                   { jjCheckNAddTwoStates(31, 32); }
                   break;
                case 34:
@@ -2480,8 +2567,8 @@
                      jjstateSet[jjnewStateCnt++] = 42;
                   break;
                case 50:
-                  if ((0x8400000000L & l) != 0L && kind > 157)
-                     kind = 157;
+                  if ((0x8400000000L & l) != 0L && kind > 161)
+                     kind = 161;
                   break;
                case 51:
                   if (curChar == 39)
@@ -2492,8 +2579,8 @@
                      { jjCheckNAddStates(32, 34); }
                   break;
                case 53:
-                  if (curChar == 39 && kind > 161)
-                     kind = 161;
+                  if (curChar == 39 && kind > 165)
+                     kind = 165;
                   break;
                case 55:
                   if ((0x8400000000L & l) != 0L)
@@ -2540,8 +2627,8 @@
                      { jjCheckNAddStates(29, 31); }
                   break;
                case 67:
-                  if (curChar == 34 && kind > 162)
-                     kind = 162;
+                  if (curChar == 34 && kind > 166)
+                     kind = 166;
                   break;
                case 69:
                   if ((0x8400000000L & l) != 0L)
@@ -2633,8 +2720,8 @@
                      { jjCheckNAddStates(44, 47); }
                   break;
                case 95:
-                  if (curChar == 39 && kind > 163)
-                     kind = 163;
+                  if (curChar == 39 && kind > 167)
+                     kind = 167;
                   break;
                case 96:
                   if (curChar == 39)
@@ -2702,8 +2789,8 @@
                      { jjCheckNAddStates(50, 53); }
                   break;
                case 115:
-                  if (curChar == 34 && kind > 164)
-                     kind = 164;
+                  if (curChar == 34 && kind > 168)
+                     kind = 168;
                   break;
                case 116:
                   if (curChar == 34)
@@ -2738,8 +2825,8 @@
                      { jjCheckNAddStates(20, 22); }
                   break;
                case 124:
-                  if (curChar == 41 && kind > 167)
-                     kind = 167;
+                  if (curChar == 41 && kind > 171)
+                     kind = 171;
                   break;
                case 125:
                   if (curChar == 10)
@@ -2782,8 +2869,8 @@
                      jjstateSet[jjnewStateCnt++] = 138;
                   break;
                case 138:
-                  if (curChar == 58 && kind > 11)
-                     kind = 11;
+                  if (curChar == 58 && kind > 10)
+                     kind = 10;
                   break;
                case 139:
                   if ((0x3ff600000000000L & l) != 0L)
@@ -2800,8 +2887,8 @@
                case 142:
                   if ((0x7ff000000000000L & l) == 0L)
                      break;
-                  if (kind > 12)
-                     kind = 12;
+                  if (kind > 11)
+                     kind = 11;
                   { jjCheckNAddStates(75, 78); }
                   break;
                case 143:
@@ -2809,8 +2896,8 @@
                      { jjCheckNAddStates(75, 78); }
                   break;
                case 144:
-                  if ((0x7ff200000000000L & l) != 0L && kind > 12)
-                     kind = 12;
+                  if ((0x7ff200000000000L & l) != 0L && kind > 11)
+                     kind = 11;
                   break;
                case 146:
                   if ((0xa800fffa00000000L & l) != 0L)
@@ -2833,18 +2920,18 @@
                      jjstateSet[jjnewStateCnt++] = 151;
                   break;
                case 151:
-                  if ((0x3ff000000000000L & l) != 0L && kind > 12)
-                     kind = 12;
+                  if ((0x3ff000000000000L & l) != 0L && kind > 11)
+                     kind = 11;
                   break;
                case 152:
-                  if ((0xa800fffa00000000L & l) != 0L && kind > 12)
-                     kind = 12;
+                  if ((0xa800fffa00000000L & l) != 0L && kind > 11)
+                     kind = 11;
                   break;
                case 154:
                   if ((0xa800fffa00000000L & l) == 0L)
                      break;
-                  if (kind > 12)
-                     kind = 12;
+                  if (kind > 11)
+                     kind = 11;
                   { jjCheckNAddStates(75, 78); }
                   break;
                case 155:
@@ -2858,15 +2945,15 @@
                case 157:
                   if ((0x3ff000000000000L & l) == 0L)
                      break;
-                  if (kind > 12)
-                     kind = 12;
+                  if (kind > 11)
+                     kind = 11;
                   { jjCheckNAddStates(75, 78); }
                   break;
                case 158:
                   if (curChar != 58)
                      break;
-                  if (kind > 11)
-                     kind = 11;
+                  if (kind > 10)
+                     kind = 10;
                   { jjCheckNAddStates(17, 19); }
                   break;
                case 161:
@@ -2920,15 +3007,15 @@
                case 191:
                   if ((0x3ff000000000000L & l) == 0L)
                      break;
-                  if (kind > 145)
-                     kind = 145;
+                  if (kind > 149)
+                     kind = 149;
                   { jjCheckNAddStates(0, 6); }
                   break;
                case 192:
                   if ((0x3ff000000000000L & l) == 0L)
                      break;
-                  if (kind > 145)
-                     kind = 145;
+                  if (kind > 149)
+                     kind = 149;
                   { jjCheckNAdd(192); }
                   break;
                case 193:
@@ -2942,8 +3029,8 @@
                case 195:
                   if ((0x3ff000000000000L & l) == 0L)
                      break;
-                  if (kind > 146)
-                     kind = 146;
+                  if (kind > 150)
+                     kind = 150;
                   { jjCheckNAdd(195); }
                   break;
                case 196:
@@ -2965,8 +3052,8 @@
                case 201:
                   if ((0x3ff000000000000L & l) == 0L)
                      break;
-                  if (kind > 147)
-                     kind = 147;
+                  if (kind > 151)
+                     kind = 151;
                   { jjCheckNAdd(201); }
                   break;
                case 202:
@@ -2980,8 +3067,8 @@
                case 205:
                   if ((0x3ff000000000000L & l) == 0L)
                      break;
-                  if (kind > 147)
-                     kind = 147;
+                  if (kind > 151)
+                     kind = 151;
                   { jjCheckNAdd(205); }
                   break;
                case 206:
@@ -2999,8 +3086,8 @@
                case 210:
                   if ((0x3ff000000000000L & l) == 0L)
                      break;
-                  if (kind > 147)
-                     kind = 147;
+                  if (kind > 151)
+                     kind = 151;
                   { jjCheckNAdd(210); }
                   break;
                case 211:
@@ -3010,8 +3097,8 @@
                case 212:
                   if ((0x3ff000000000000L & l) == 0L)
                      break;
-                  if (kind > 148)
-                     kind = 148;
+                  if (kind > 152)
+                     kind = 152;
                   { jjCheckNAdd(212); }
                   break;
                case 213:
@@ -3025,8 +3112,8 @@
                case 215:
                   if ((0x3ff000000000000L & l) == 0L)
                      break;
-                  if (kind > 149)
-                     kind = 149;
+                  if (kind > 153)
+                     kind = 153;
                   { jjCheckNAdd(215); }
                   break;
                case 216:
@@ -3044,8 +3131,8 @@
                case 220:
                   if ((0x3ff000000000000L & l) == 0L)
                      break;
-                  if (kind > 150)
-                     kind = 150;
+                  if (kind > 154)
+                     kind = 154;
                   { jjCheckNAdd(220); }
                   break;
                case 221:
@@ -3071,8 +3158,8 @@
                case 227:
                   if ((0x3ff000000000000L & l) == 0L)
                      break;
-                  if (kind > 150)
-                     kind = 150;
+                  if (kind > 154)
+                     kind = 154;
                   { jjCheckNAdd(227); }
                   break;
                case 228:
@@ -3086,8 +3173,8 @@
                case 231:
                   if ((0x3ff000000000000L & l) == 0L)
                      break;
-                  if (kind > 150)
-                     kind = 150;
+                  if (kind > 154)
+                     kind = 154;
                   { jjCheckNAdd(231); }
                   break;
                case 232:
@@ -3097,8 +3184,8 @@
                case 233:
                   if ((0x3ff000000000000L & l) == 0L)
                      break;
-                  if (kind > 151)
-                     kind = 151;
+                  if (kind > 155)
+                     kind = 155;
                   { jjCheckNAdd(233); }
                   break;
                case 234:
@@ -3112,8 +3199,8 @@
                case 236:
                   if ((0x3ff000000000000L & l) == 0L)
                      break;
-                  if (kind > 152)
-                     kind = 152;
+                  if (kind > 156)
+                     kind = 156;
                   { jjCheckNAdd(236); }
                   break;
                case 237:
@@ -3131,8 +3218,8 @@
                case 241:
                   if ((0x3ff000000000000L & l) == 0L)
                      break;
-                  if (kind > 153)
-                     kind = 153;
+                  if (kind > 157)
+                     kind = 157;
                   { jjCheckNAdd(241); }
                   break;
                case 242:
@@ -3158,8 +3245,8 @@
                case 248:
                   if ((0x3ff000000000000L & l) == 0L)
                      break;
-                  if (kind > 153)
-                     kind = 153;
+                  if (kind > 157)
+                     kind = 157;
                   { jjCheckNAdd(248); }
                   break;
                case 249:
@@ -3173,8 +3260,8 @@
                case 252:
                   if ((0x3ff000000000000L & l) == 0L)
                      break;
-                  if (kind > 153)
-                     kind = 153;
+                  if (kind > 157)
+                     kind = 157;
                   { jjCheckNAdd(252); }
                   break;
                default : break;
@@ -3256,8 +3343,8 @@
                case 19:
                   if ((0x7fffffe87fffffeL & l) == 0L)
                      break;
-                  if (kind > 13)
-                     kind = 13;
+                  if (kind > 12)
+                     kind = 12;
                   { jjCheckNAddTwoStates(20, 21); }
                   break;
                case 20:
@@ -3265,8 +3352,8 @@
                      { jjCheckNAddTwoStates(20, 21); }
                   break;
                case 21:
-                  if ((0x7fffffe87fffffeL & l) != 0L && kind > 13)
-                     kind = 13;
+                  if ((0x7fffffe87fffffeL & l) != 0L && kind > 12)
+                     kind = 12;
                   break;
                case 22:
                   if (curChar == 95)
@@ -3276,16 +3363,16 @@
                case 25:
                   if ((0x7fffffe87fffffeL & l) == 0L)
                      break;
-                  if (kind > 14)
-                     kind = 14;
+                  if (kind > 13)
+                     kind = 13;
                   { jjCheckNAdd(25); }
                   break;
                case 27:
                case 28:
                   if ((0x7fffffe87fffffeL & l) == 0L)
                      break;
-                  if (kind > 15)
-                     kind = 15;
+                  if (kind > 14)
+                     kind = 14;
                   { jjCheckNAdd(28); }
                   break;
                case 29:
@@ -3295,15 +3382,15 @@
                case 30:
                   if ((0x7fffffe07fffffeL & l) == 0L)
                      break;
-                  if (kind > 16)
-                     kind = 16;
+                  if (kind > 15)
+                     kind = 15;
                   { jjCheckNAddTwoStates(30, 31); }
                   break;
                case 32:
                   if ((0x7fffffe07fffffeL & l) == 0L)
                      break;
-                  if (kind > 16)
-                     kind = 16;
+                  if (kind > 15)
+                     kind = 15;
                   { jjCheckNAddTwoStates(31, 32); }
                   break;
                case 33:
@@ -3314,8 +3401,8 @@
                   { jjCheckNAddStates(35, 40); }
                   break;
                case 38:
-                  if ((0x200000002L & l) != 0L && kind > 126)
-                     kind = 126;
+                  if ((0x200000002L & l) != 0L && kind > 130)
+                     kind = 130;
                   break;
                case 39:
                   if ((0x10000000100000L & l) != 0L)
@@ -3354,8 +3441,8 @@
                      jjstateSet[jjnewStateCnt++] = 50;
                   break;
                case 50:
-                  if ((0x14404410000000L & l) != 0L && kind > 157)
-                     kind = 157;
+                  if ((0x14404410000000L & l) != 0L && kind > 161)
+                     kind = 161;
                   break;
                case 52:
                   if ((0xffffffffefffffffL & l) != 0L)
@@ -3560,8 +3647,8 @@
                   { jjCheckNAddStates(62, 67); }
                   break;
                case 132:
-                  if (curChar == 93 && kind > 172)
-                     kind = 172;
+                  if (curChar == 93 && kind > 176)
+                     kind = 176;
                   break;
                case 135:
                   if ((0x7fffffe07fffffeL & l) != 0L)
@@ -3586,8 +3673,8 @@
                case 142:
                   if ((0x7fffffe87fffffeL & l) == 0L)
                      break;
-                  if (kind > 12)
-                     kind = 12;
+                  if (kind > 11)
+                     kind = 11;
                   { jjCheckNAddStates(75, 78); }
                   break;
                case 143:
@@ -3595,8 +3682,8 @@
                      { jjCheckNAddStates(75, 78); }
                   break;
                case 144:
-                  if ((0x7fffffe87fffffeL & l) != 0L && kind > 12)
-                     kind = 12;
+                  if ((0x7fffffe87fffffeL & l) != 0L && kind > 11)
+                     kind = 11;
                   break;
                case 145:
                   if (curChar == 92)
@@ -3619,12 +3706,12 @@
                      jjstateSet[jjnewStateCnt++] = 151;
                   break;
                case 151:
-                  if ((0x7e0000007eL & l) != 0L && kind > 12)
-                     kind = 12;
+                  if ((0x7e0000007eL & l) != 0L && kind > 11)
+                     kind = 11;
                   break;
                case 152:
-                  if ((0x4000000080000001L & l) != 0L && kind > 12)
-                     kind = 12;
+                  if ((0x4000000080000001L & l) != 0L && kind > 11)
+                     kind = 11;
                   break;
                case 153:
                   if (curChar == 92)
@@ -3633,8 +3720,8 @@
                case 154:
                   if ((0x4000000080000001L & l) == 0L)
                      break;
-                  if (kind > 12)
-                     kind = 12;
+                  if (kind > 11)
+                     kind = 11;
                   { jjCheckNAddStates(75, 78); }
                   break;
                case 156:
@@ -3644,8 +3731,8 @@
                case 157:
                   if ((0x7e0000007eL & l) == 0L)
                      break;
-                  if (kind > 12)
-                     kind = 12;
+                  if (kind > 11)
+                     kind = 11;
                   { jjCheckNAddStates(75, 78); }
                   break;
                case 159:
@@ -3660,8 +3747,8 @@
                   { jjCheckNAddStates(81, 86); }
                   break;
                case 165:
-                  if ((0x200000002L & l) != 0L && kind > 127)
-                     kind = 127;
+                  if ((0x200000002L & l) != 0L && kind > 131)
+                     kind = 131;
                   break;
                case 166:
                   if ((0x10000000100000L & l) != 0L)
@@ -3699,8 +3786,8 @@
                   { jjCheckNAddStates(90, 95); }
                   break;
                case 180:
-                  if ((0x2000000020L & l) != 0L && kind > 128)
-                     kind = 128;
+                  if ((0x2000000020L & l) != 0L && kind > 132)
+                     kind = 132;
                   break;
                case 181:
                   if ((0x4000000040000L & l) != 0L)
@@ -3803,8 +3890,8 @@
                case 19:
                   if (!jjCanMove_1(hiByte, i1, i2, l1, l2))
                      break;
-                  if (kind > 13)
-                     kind = 13;
+                  if (kind > 12)
+                     kind = 12;
                   { jjCheckNAddTwoStates(20, 21); }
                   break;
                case 20:
@@ -3812,35 +3899,35 @@
                      { jjCheckNAddTwoStates(20, 21); }
                   break;
                case 21:
-                  if (jjCanMove_2(hiByte, i1, i2, l1, l2) && kind > 13)
-                     kind = 13;
+                  if (jjCanMove_2(hiByte, i1, i2, l1, l2) && kind > 12)
+                     kind = 12;
                   break;
                case 24:
                   if (!jjCanMove_1(hiByte, i1, i2, l1, l2))
                      break;
-                  if (kind > 14)
-                     kind = 14;
+                  if (kind > 13)
+                     kind = 13;
                   { jjCheckNAdd(25); }
                   break;
                case 25:
                   if (!jjCanMove_2(hiByte, i1, i2, l1, l2))
                      break;
-                  if (kind > 14)
-                     kind = 14;
+                  if (kind > 13)
+                     kind = 13;
                   { jjCheckNAdd(25); }
                   break;
                case 27:
                   if (!jjCanMove_1(hiByte, i1, i2, l1, l2))
                      break;
-                  if (kind > 15)
-                     kind = 15;
+                  if (kind > 14)
+                     kind = 14;
                   { jjCheckNAdd(28); }
                   break;
                case 28:
                   if (!jjCanMove_2(hiByte, i1, i2, l1, l2))
                      break;
-                  if (kind > 15)
-                     kind = 15;
+                  if (kind > 14)
+                     kind = 14;
                   { jjCheckNAdd(28); }
                   break;
                case 35:
@@ -3890,8 +3977,8 @@
                case 142:
                   if (!jjCanMove_1(hiByte, i1, i2, l1, l2))
                      break;
-                  if (kind > 12)
-                     kind = 12;
+                  if (kind > 11)
+                     kind = 11;
                   { jjCheckNAddStates(75, 78); }
                   break;
                case 143:
@@ -3899,8 +3986,8 @@
                      { jjCheckNAddStates(75, 78); }
                   break;
                case 144:
-                  if (jjCanMove_2(hiByte, i1, i2, l1, l2) && kind > 12)
-                     kind = 12;
+                  if (jjCanMove_2(hiByte, i1, i2, l1, l2) && kind > 11)
+                     kind = 11;
                   break;
                case 162:
                   if (jjCanMove_0(hiByte, i1, i2, l1, l2))
@@ -3949,8 +4036,8 @@
 
 /** Token literal values. */
 public static final String[] jjstrLiteralImages = {
-"", null, null, null, null, null, null, null, null, "\ufeff", null, null, null, 
-null, null, null, null, null, null, "\141", null, null, null, null, null, null, null, 
+"", null, null, null, null, null, null, null, null, null, null, null, null, 
+null, null, null, null, null, "\141", null, null, null, null, null, null, null, null, 
 null, null, null, null, null, null, null, null, null, null, null, null, null, null, 
 null, null, null, null, null, null, null, null, null, null, null, null, null, null, 
 null, null, null, null, null, null, null, null, null, null, null, null, null, null, 
@@ -3960,11 +4047,12 @@
 null, null, null, null, null, null, null, null, null, null, null, null, null, null, 
 null, null, null, null, null, null, null, null, null, null, null, null, null, null, 
 null, null, null, null, null, null, null, null, null, null, null, null, null, null, 
-null, null, null, null, null, null, null, null, null, null, null, null, "\50", 
-"\51", null, "\173", "\175", "\133", "\135", null, "\73", "\54", "\56", "\75", 
-"\41\75", "\76", "\74", "\74\75", "\76\75", "\41", "\176", "\72", "\174\174", "\46\46", 
-"\53", "\55", "\52", "\57", "\136\136", "\100", "\174", "\136", "\55\76", "\74\55", 
-"\77", null, null, null, null, null, null, null, null, null, null, null, };
+null, null, null, null, null, null, null, null, null, null, null, null, null, null, 
+null, null, "\50", "\51", null, "\173", "\175", "\133", "\135", null, "\73", "\54", 
+"\56", "\75", "\41\75", "\76", "\74", "\74\75", "\76\75", "\76\76", "\74\74", 
+"\173\174", "\174\175", "\41", "\176", "\72", "\174\174", "\46\46", "\53", "\55", "\52", 
+"\57", "\136\136", "\100", "\174", "\136", "\55\76", "\74\55", "\77", null, null, 
+null, null, null, null, null, null, null, null, null, };
 protected Token jjFillToken()
 {
    final Token t;
@@ -4264,10 +4352,10 @@
    -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 
    -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 
    -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 
-   -1, -1, -1, -1, -1, -1, -1, -1, -1, 
+   -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 
 };
 static final long[] jjtoToken = {
-   0xfffffffffff9fe01L, 0xffffffffffffffffL, 0xfffffffe23feffffL, 0x3fL, 
+   0xfffffffffffcfe01L, 0xffffffffffffffffL, 0xffffffe23fefffffL, 0x3fffL, 
 };
 static final long[] jjtoSkip = {
    0x7eL, 0x0L, 0x0L, 0x0L, 
diff --git a/jena-arq/src/main/java/org/apache/jena/sparql/sse/ItemWriter.java b/jena-arq/src/main/java/org/apache/jena/sparql/sse/ItemWriter.java
index 0459b6e..1a0b45d 100644
--- a/jena-arq/src/main/java/org/apache/jena/sparql/sse/ItemWriter.java
+++ b/jena-arq/src/main/java/org/apache/jena/sparql/sse/ItemWriter.java
@@ -44,10 +44,18 @@
     }
 
     public static void write(IndentedWriter out, Item item, SerializationContext sCxt) {
-        writeFn(out, item, sCxt);
+        writeInline(out, item, sCxt);
     }
 
-    // Core function. Does not apply reverse lift.
+    // Core function. Does not apply reverse lift. Does not write prefixes or base.
+    private static void writeInline(IndentedWriter out, Item item, SerializationContext sCxt) {
+        Print pv = new Print(out, sCxt);
+        pv.startPrint();
+        item.visit(pv);
+        pv.finishPrint();
+    }
+
+    // Core function. Writes self contained output with prfixes and base.
     private static void writeFn(IndentedWriter out, Item item, SerializationContext sCxt) {
         Print pv = new Print(out, sCxt);
         pv.startPrint();
@@ -130,7 +138,9 @@
             this.sCxt = sCxt;
         }
 
-        void startPrint() {
+        void startPrint() {}
+
+        void writeContext() {
             if ( sCxt != null ) {
                 if ( includeBase && sCxt.getBaseIRI() != null ) {
                     out.print("(base ");
@@ -151,7 +161,6 @@
                 }
             }
         }
-
         void finishPrint() {
             if ( doneBase ) {
                 out.print(")");
diff --git a/jena-arq/src/main/java/org/apache/jena/sparql/util/graph/Findable.java b/jena-arq/src/main/java/org/apache/jena/sparql/util/graph/Findable.java
index 08275fa..d06b484 100644
--- a/jena-arq/src/main/java/org/apache/jena/sparql/util/graph/Findable.java
+++ b/jena-arq/src/main/java/org/apache/jena/sparql/util/graph/Findable.java
@@ -18,27 +18,27 @@
 
 package org.apache.jena.sparql.util.graph;
 
-import java.util.Iterator ;
+import java.util.Iterator;
 
 import org.apache.jena.atlas.iterator.Iter;
-import org.apache.jena.graph.Node ;
-import org.apache.jena.graph.Triple ;
+import org.apache.jena.graph.Node;
+import org.apache.jena.graph.Triple;
 
 /** Minimal interface to find by pattern */
 public interface Findable
 {
-    /** Return an iterator over all triples matching the {@code (s,p,o)} pattern. 
-     * Each element of {@code (s,p,o)} can be concrete, or the wildcard {@code Node.ANY}. 
-     */  
-    public Iterator<Triple> find(Node s, Node p, Node o) ;
-    
-    /** Return whether any triple matches the (s,p,o) pattern. 
-     * Each element of {@code (s,p,o)} can be concrete, or the wildcard {@code Node.ANY}. 
-     */  
-    public boolean contains(Node s, Node p, Node o) ;
-    
-    /** Return the number of triples matching the (s,p,o) pattern. 
-     */  
+    /** Return an iterator over all triples matching the {@code (s,p,o)} pattern.
+     * Each element of {@code (s,p,o)} can be concrete, or the wildcard {@code Node.ANY}.
+     */
+    public Iterator<Triple> find(Node s, Node p, Node o);
+
+    /** Return whether any triple matches the (s,p,o) pattern.
+     * Each element of {@code (s,p,o)} can be concrete, or the wildcard {@code Node.ANY}.
+     */
+    public boolean contains(Node s, Node p, Node o);
+
+    /** Return the number of triples matching the (s,p,o) pattern.
+     */
     public default int count(Node s, Node p, Node o) {
         return (int)Iter.count(find(s,p,o));
     }
diff --git a/jena-arq/src/main/java/org/apache/jena/sparql/util/graph/FindableCollection.java b/jena-arq/src/main/java/org/apache/jena/sparql/util/graph/FindableCollection.java
index 2a85439..270ac68 100644
--- a/jena-arq/src/main/java/org/apache/jena/sparql/util/graph/FindableCollection.java
+++ b/jena-arq/src/main/java/org/apache/jena/sparql/util/graph/FindableCollection.java
@@ -21,48 +21,48 @@
 import java.util.*;
 
 import org.apache.jena.atlas.iterator.Iter;
-import org.apache.jena.graph.Node ;
-import org.apache.jena.graph.Triple ;
+import org.apache.jena.graph.Node;
+import org.apache.jena.graph.Triple;
 
 public class FindableCollection implements Findable
 {
-    private Collection<Triple> triples ;
+    private Collection<Triple> triples;
 
-    public FindableCollection(Collection<Triple> triples) { this.triples = triples ; }
-    
+    public FindableCollection(Collection<Triple> triples) { this.triples = triples; }
+
     @Override
-    public Iterator<Triple> find(Node _s, Node _p, Node _o) {
-        Node s = m(_s) ;
-        Node p = m(_p) ;
-        Node o = m(_o) ;
-        return Iter.filter(triples.iterator(), (t)->matches(t, s, p, o)); 
+    public Iterator<Triple> find(Node s, Node p, Node o) {
+        Node _s = anyAsNull(s);
+        Node _p = anyAsNull(p);
+        Node _o = anyAsNull(o);
+        return Iter.filter(triples.iterator(), (t)->matches(t, _s, _p, _o));
     }
-    
-    static Node m(Node n) {
-        return n == Node.ANY ? null : n ; 
+
+    private static Node anyAsNull(Node n) {
+        // So we can match "ANY"
+        return n == Node.ANY ? null : n;
     }
-    
+
     // Does concrete t match the pattern (s,p,o)?
     /*package*/ static boolean matches(Triple t, Node s, Node p, Node o) {
         if ( s != null && ! Objects.equals(s, t.getSubject()) )
-            return false ;
+            return false;
         if ( p != null && ! Objects.equals(p, t.getPredicate()) )
-            return false ;
+            return false;
         if ( o != null && ! Objects.equals(o, t.getObject()) )
-            return false ;
-        return true ;
+            return false;
+        return true;
     }
-    
+
     @Override
-    public boolean contains(Node s, Node p, Node o)
-    {
-        if ( s == Node.ANY ) s = null ;
-        if ( p == Node.ANY ) p = null ;
-        if ( o == Node.ANY ) o = null ;
+    public boolean contains(Node s, Node p, Node o) {
+        Node _s = anyAsNull(s);
+        Node _p = anyAsNull(p);
+        Node _o = anyAsNull(o);
         for ( Triple t : triples ) {
-            if ( matches(t, s, p, o) )
+            if ( matches(t, _s, _p, _o) )
                 return true;
         }
-        return false ;
+        return false;
     }
 }
diff --git a/jena-arq/src/main/java/org/apache/jena/sparql/util/graph/FindableGraph.java b/jena-arq/src/main/java/org/apache/jena/sparql/util/graph/FindableGraph.java
index 2bf1637..46cd5be 100644
--- a/jena-arq/src/main/java/org/apache/jena/sparql/util/graph/FindableGraph.java
+++ b/jena-arq/src/main/java/org/apache/jena/sparql/util/graph/FindableGraph.java
@@ -18,33 +18,31 @@
 
 package org.apache.jena.sparql.util.graph;
 
-import java.util.Iterator ;
+import java.util.Iterator;
 
-import org.apache.jena.graph.Graph ;
-import org.apache.jena.graph.Node ;
-import org.apache.jena.graph.Triple ;
+import org.apache.jena.graph.Graph;
+import org.apache.jena.graph.Node;
+import org.apache.jena.graph.Triple;
 
 class FindableGraph implements Findable
 {
-    private Graph graph ;
+    private Graph graph;
 
-    FindableGraph(Graph graph) { this.graph = graph ; }
+    FindableGraph(Graph graph) { this.graph = graph; }
 
     @Override
-    public Iterator<Triple> find(Node s, Node p, Node o)
-    {
-        if ( s == null ) s = Node.ANY ;
-        if ( p == null ) p = Node.ANY ;
-        if ( o == null ) o = Node.ANY ;
-        return graph.find(s, p ,o) ;
+    public Iterator<Triple> find(Node s, Node p, Node o) {
+        if ( s == null ) s = Node.ANY;
+        if ( p == null ) p = Node.ANY;
+        if ( o == null ) o = Node.ANY;
+        return graph.find(s, p ,o);
     }
 
     @Override
-    public boolean contains(Node s, Node p, Node o)
-    {
-        if ( s == null ) s = Node.ANY ;
-        if ( p == null ) p = Node.ANY ;
-        if ( o == null ) o = Node.ANY ;
-        return graph.contains(s, p, o) ;
+    public boolean contains(Node s, Node p, Node o) {
+        if ( s == null ) s = Node.ANY;
+        if ( p == null ) p = Node.ANY;
+        if ( o == null ) o = Node.ANY;
+        return graph.contains(s, p, o);
     }
 }
diff --git a/jena-arq/src/main/java/org/apache/jena/sparql/util/graph/GNode.java b/jena-arq/src/main/java/org/apache/jena/sparql/util/graph/GNode.java
index de5b852..acd1888 100644
--- a/jena-arq/src/main/java/org/apache/jena/sparql/util/graph/GNode.java
+++ b/jena-arq/src/main/java/org/apache/jena/sparql/util/graph/GNode.java
@@ -20,10 +20,10 @@
 
 import java.util.Collection;
 
-import org.apache.jena.graph.Graph ;
-import org.apache.jena.graph.Node ;
+import org.apache.jena.graph.Graph;
+import org.apache.jena.graph.Node;
 import org.apache.jena.graph.Triple;
-import org.apache.jena.sparql.core.BasicPattern ;
+import org.apache.jena.sparql.core.BasicPattern;
 
 
 /**
@@ -50,21 +50,21 @@
         return triple == null ? null : create(graph, triple.getObject());
     }
     
-    public final Findable findable ;
-    public final Node node ;
+    public final Findable findable;
+    public final Node node;
     
     public GNode(Graph graph, Node node)
-    { this.findable = new FindableGraph(graph) ; this.node = node ; }
+    { this.findable = new FindableGraph(graph); this.node = node; }
     
     public GNode(BasicPattern triples, Node node)
-    { this.findable = new FindableCollection(triples.getList()) ; this.node = node ; }
+    { this.findable = new FindableCollection(triples.getList()); this.node = node; }
     
     public GNode(Collection<Triple> triples, Node node)
-    { this.findable = new FindableCollection(triples) ; this.node = node ; }
+    { this.findable = new FindableCollection(triples); this.node = node; }
 
     public GNode(GNode other, Node node)
-    { this.findable = other.findable ; this.node = node ; }
+    { this.findable = other.findable; this.node = node; }
 
     @Override
-    public String toString() { return "gnode:"+node ; }
+    public String toString() { return "gnode:"+node; }
 }
diff --git a/jena-arq/src/main/java/org/apache/jena/sparql/util/graph/GraphContainerUtils.java b/jena-arq/src/main/java/org/apache/jena/sparql/util/graph/GraphContainerUtils.java
index 974d160..9cc9e6a 100644
--- a/jena-arq/src/main/java/org/apache/jena/sparql/util/graph/GraphContainerUtils.java
+++ b/jena-arq/src/main/java/org/apache/jena/sparql/util/graph/GraphContainerUtils.java
@@ -18,185 +18,153 @@
 
 package org.apache.jena.sparql.util.graph;
 
-import java.util.Collection ;
-import java.util.Iterator ;
-import java.util.SortedMap ;
-import java.util.TreeMap ;
+import java.util.Collection;
+import java.util.Iterator;
+import java.util.SortedMap;
+import java.util.TreeMap;
 import java.util.function.Predicate;
-import java.util.regex.Matcher ;
-import java.util.regex.Pattern ;
+import java.util.regex.Matcher;
+import java.util.regex.Pattern;
 
-import org.apache.jena.atlas.logging.Log ;
-import org.apache.jena.graph.Graph ;
-import org.apache.jena.graph.Node ;
-import org.apache.jena.graph.Triple ;
-import org.apache.jena.sparql.expr.Expr ;
-import org.apache.jena.util.iterator.ExtendedIterator ;
-import org.apache.jena.vocabulary.RDF ;
-import org.apache.jena.vocabulary.RDFS ;
+import org.apache.jena.atlas.logging.Log;
+import org.apache.jena.graph.Graph;
+import org.apache.jena.graph.Node;
+import org.apache.jena.graph.Triple;
+import org.apache.jena.sparql.expr.Expr;
+import org.apache.jena.util.iterator.ExtendedIterator;
+import org.apache.jena.vocabulary.RDF;
+import org.apache.jena.vocabulary.RDFS;
 
 public class GraphContainerUtils
 {
-    private static final Node RDFtype = RDF.type.asNode() ;
-    private static final Node BAG = RDF.Bag.asNode() ;
-    private static final Node ALT = RDF.Alt.asNode() ;
-    private static final Node SEQ = RDF.Seq.asNode() ;
-    private static final String membershipPattern$ = RDF.getURI()+"_(\\d+)" ;
-    private static final Pattern membershipPattern = Pattern.compile(membershipPattern$) ;
-    private static final int NOT_FOUND = -9999 ;
+    private static final Node RDFtype = RDF.type.asNode();
+    private static final Node BAG = RDF.Bag.asNode();
+    private static final Node ALT = RDF.Alt.asNode();
+    private static final Node SEQ = RDF.Seq.asNode();
+    private static final String membershipPattern$ = RDF.getURI()+"_(\\d+)";
+    private static final Pattern membershipPattern = Pattern.compile(membershipPattern$);
+    private static final int NOT_FOUND = -9999;
 
     public static Collection<Node> containerMembers(Graph graph, Node container)
-    { return containerMembers(graph, container, null) ; }
+    { return containerMembers(graph, container, null); }
 
-    public static Collection<Node> containerMembers(Graph graph, Node container, Node containerType)
-    {
+    public static Collection<Node> containerMembers(Graph graph, Node container, Node containerType) {
         if ( ! isContainer(graph, container, containerType) )
-            return null ;
+            return null;
 
-        ExtendedIterator<Triple> iter = graph.find(container, Node.ANY, Node.ANY) ;
+        ExtendedIterator<Triple> iter = graph.find(container, Node.ANY, Node.ANY);
 
-        SortedMap<Integer, Node> triples = new TreeMap<>(order) ;
+        SortedMap<Integer, Node> triples = new TreeMap<>(order);
         try {
-            for ( ; iter.hasNext() ; )
-            {
-                Triple t = iter.next() ;
-                int index = getIndex(t) ;
+            for ( ; iter.hasNext() ; ) {
+                Triple t = iter.next();
+                int index = getIndex(t);
                 if ( index == NOT_FOUND )
-                    continue ;
-                // Insert 
-                triples.put(Integer.valueOf(index), t.getObject()) ;
+                    continue;
+                // Insert
+                triples.put(Integer.valueOf(index), t.getObject());
             }
-        } finally { iter.close() ; }
-        return triples.values() ;
-    }
-            
-            
-//            List x = new ArrayList() ;
-//            try {
-//              for ( ; iter.hasNext() ; )
-//              {
-//                  // Sort triples in a sorted set.
-//                  // Then extract.
-//                  Triple t = (Triple)iter.next() ;
-//                  String p = t.getPredicate().getURI() ;
-//    
-//                  if ( p.matches(membershipPattern) )
-//                      x.add(t.getObject()) ;
-//              }
-//          } finally { iter.close() ; }
-//          return x ;
-//      }
-
-    public static boolean isContainerMember(Graph graph, Node container, Node containerType, Node member)
-    {
-        return countContainerMember(graph, container, containerType, member, true) != 0 ;
+        } finally { iter.close(); }
+        return triples.values();
     }
 
-    public static int countContainerMember(Graph graph, Node container, Node containerType, Node member)
-    {
-        return countContainerMember(graph, container, containerType, member, false) ;
+    public static boolean isContainerMember(Graph graph, Node container, Node containerType, Node member) {
+        return countContainerMember(graph, container, containerType, member, true) != 0;
     }
-    
-    private static Node RDFSmember = RDFS.member.asNode() ;
+
+    public static int countContainerMember(Graph graph, Node container, Node containerType, Node member) {
+        return countContainerMember(graph, container, containerType, member, false);
+    }
+
+    private static Node RDFSmember = RDFS.member.asNode();
     private static Predicate<Triple> filterRDFSmember = new Predicate<Triple>() {
         @Override
         public boolean test(Triple triple) {
-            Node p = triple.getPredicate() ;
+            Node p = triple.getPredicate();
             if ( ! triple.getPredicate().isURI() )
-                return false ;
+                return false;
             if (RDFSmember.equals(p) )
-                return true ;
-            String u = triple.getPredicate().getURI() ;
-            return membershipPattern.matcher(u).matches() ;
-        } } ; 
+                return true;
+            String u = triple.getPredicate().getURI();
+            return membershipPattern.matcher(u).matches();
+        } };
 
-    /** Calculate graph.find(?, rdfs:member, ?) */ 
+    /** Calculate graph.find(?, rdfs:member, ?) */
     public static Iterator<Triple> rdfsMember(Graph graph, Node s, Node o) {
-        ExtendedIterator<Triple> iter = graph.find(s, Node.ANY, o) ;
-        return iter.filterKeep(filterRDFSmember)  ;
+        ExtendedIterator<Triple> iter = graph.find(s, Node.ANY, o);
+        return iter.filterKeep(filterRDFSmember) ;
     }
-    
-    private static int countContainerMember(Graph graph, Node container, Node containerType, Node member, boolean stopEarly)
-    {
-        if ( graph == null )
-        {
-            Log.warn(GraphContainerUtils.class, "containerMember called with null graph") ;
-            return 0 ;
+
+    private static int countContainerMember(Graph graph, Node container, Node containerType, Node member, boolean stopEarly) {
+        if ( graph == null ) {
+            Log.warn(GraphContainerUtils.class, "containerMember called with null graph");
+            return 0;
         }
-        
-        if ( container == null )
-        {
-            Log.warn(GraphContainerUtils.class, "containerMember called with null list") ;
-            return 0 ;
+
+        if ( container == null ) {
+            Log.warn(GraphContainerUtils.class, "containerMember called with null list");
+            return 0;
         }
-        if ( member == null )
-        {
-            Log.warn(GraphContainerUtils.class, "containerMember called with null member") ;
-            return 0 ;
+        if ( member == null ) {
+            Log.warn(GraphContainerUtils.class, "containerMember called with null member");
+            return 0;
         }
-        
-        if ( ! isContainer(graph, container, containerType) )
-            return 0 ;
-        
-        int count = 0 ;
-        ExtendedIterator<Triple> iter = graph.find(container, Node.ANY, member) ;
+
+        if ( !isContainer(graph, container, containerType) )
+            return 0;
+
+        int count = 0;
+        ExtendedIterator<Triple> iter = graph.find(container, Node.ANY, member);
         try {
-            for ( ; iter.hasNext() ; )
-            {
-                Triple t = iter.next() ;
-                Node p = t.getPredicate() ;
-                String u = p.getURI() ;
-                 
+            for ( ; iter.hasNext() ; ) {
+                Triple t = iter.next();
+                Node p = t.getPredicate();
+                String u = p.getURI();
+
                 if ( membershipPattern.matcher(u).matches() ) {
-                    count ++ ;
+                    count++;
                     if ( stopEarly )
-                        return count ;
+                        return count;
                 }
             }
-        } finally { iter.close() ; }
-        return count ;
+        }
+        finally {
+            iter.close();
+        }
+        return count;
     }
 
-//    public static boolean isContainer(Graph graph, Node container)
-//    { return isContainer(graph, container, null) ; }
-
-    public static boolean isContainer(Graph graph, Node container, Node containerType)
-    {
-//        if ( container.isLiteral() )
-//            return false ;
-        
+    public static boolean isContainer(Graph graph, Node container, Node containerType) {
         if ( containerType == null )
             return  isContainer(graph, container, BAG) ||
                     isContainer(graph, container, ALT) ||
-                    isContainer(graph, container, SEQ) ;
-        
-        return graph.contains(container, RDFtype, containerType) ; 
+                    isContainer(graph, container, SEQ);
+
+        return graph.contains(container, RDFtype, containerType);
     }
-    
-    private static int getIndex(Triple triple)
-    {
-        String u = triple.getPredicate().getURI() ;
+
+    private static int getIndex(Triple triple) {
+        String u = triple.getPredicate().getURI();
         // Must be _nnn.
         Matcher m = membershipPattern.matcher(u);
         if ( ! m.find() )
-            return NOT_FOUND ; 
-        String index = m.group(1) ;
-        return Integer.parseInt(index) ;
-    }
-    
-    static ContainerOrder order = new ContainerOrder() ;
-    static private class ContainerOrder implements java.util.Comparator<Integer>
-    {
-        @Override
-        public int compare(Integer i1, Integer i2)
-        {
-            int index1 = i1.intValue() ;
-            int index2 = i2.intValue() ;
-            
-            if ( index1 < index2 ) return Expr.CMP_LESS ; 
-            if ( index1 > index2 ) return Expr.CMP_GREATER ;
-            return Expr.CMP_EQUAL ; 
-        }
+            return NOT_FOUND;
+        String index = m.group(1);
+        return Integer.parseInt(index);
     }
 
+    static ContainerOrder order = new ContainerOrder();
+    static private class ContainerOrder implements java.util.Comparator<Integer> {
+        @Override
+        public int compare(Integer i1, Integer i2) {
+            int index1 = i1.intValue();
+            int index2 = i2.intValue();
+
+            if ( index1 < index2 )
+                return Expr.CMP_LESS;
+            if ( index1 > index2 )
+                return Expr.CMP_GREATER;
+            return Expr.CMP_EQUAL;
+        }
+    }
 }
diff --git a/jena-arq/src/main/java/org/apache/jena/sparql/util/graph/GraphList.java b/jena-arq/src/main/java/org/apache/jena/sparql/util/graph/GraphList.java
index 1d999e0..8c1f12f 100644
--- a/jena-arq/src/main/java/org/apache/jena/sparql/util/graph/GraphList.java
+++ b/jena-arq/src/main/java/org/apache/jena/sparql/util/graph/GraphList.java
@@ -18,23 +18,23 @@
 
 package org.apache.jena.sparql.util.graph;
 
-import java.util.ArrayList ;
-import java.util.Collection ;
-import java.util.HashSet ;
-import java.util.Iterator ;
-import java.util.List ;
-import java.util.Set ;
-import org.apache.jena.atlas.iterator.Iter ;
-import org.apache.jena.atlas.iterator.IteratorConcat ;
-import org.apache.jena.atlas.logging.Log ;
-import org.apache.jena.graph.Graph ;
-import org.apache.jena.graph.Node ;
-import org.apache.jena.graph.NodeFactory ;
-import org.apache.jena.graph.Triple ;
-import org.apache.jena.sparql.core.BasicPattern ;
-import org.apache.jena.sparql.vocabulary.ListPFunction ;
-import org.apache.jena.util.iterator.NiceIterator ;
-import org.apache.jena.vocabulary.RDF ;
+import java.util.ArrayList;
+import java.util.Collection;
+import java.util.HashSet;
+import java.util.Iterator;
+import java.util.List;
+import java.util.Set;
+import org.apache.jena.atlas.iterator.Iter;
+import org.apache.jena.atlas.iterator.IteratorConcat;
+import org.apache.jena.atlas.logging.Log;
+import org.apache.jena.graph.Graph;
+import org.apache.jena.graph.Node;
+import org.apache.jena.graph.NodeFactory;
+import org.apache.jena.graph.Triple;
+import org.apache.jena.sparql.core.BasicPattern;
+import org.apache.jena.sparql.vocabulary.ListPFunction;
+import org.apache.jena.util.iterator.NiceIterator;
+import org.apache.jena.vocabulary.RDF;
 
 // Support function for RDF collections (graph level)
 
@@ -44,341 +44,341 @@
     /** Starting at a list element, find the heads of lists it is in */
     public static List<Node> listFromMember(GNode gnode)
     {
-        List<Node> x = new ArrayList<>() ;
-        listFromMember(gnode, x) ;
-        return x ;
+        List<Node> x = new ArrayList<>();
+        listFromMember(gnode, x);
+        return x;
     }
-    
+
     public static void listFromMember(GNode gnode, final Collection<Node> acc)
     {
         // Get the list nodes for this value.
-        Set<GNode> lists = findCellsWithMember(gnode) ;
-        
+        Set<GNode> lists = findCellsWithMember(gnode);
+
         for ( GNode gn : lists )
         {
             // For each, Reverse to the head
             while( gn != null )
             {
-                GNode gn2 = previous(gn) ;
+                GNode gn2 = previous(gn);
                 if ( gn2 == null )
                 {
-                    acc.add(gn.node) ;
+                    acc.add(gn.node);
                     // Finish inner loop
-                    break ;
+                    break;
                 }
-                gn = gn2 ;
+                gn = gn2;
             }
         }
     }
-    
+
     private static Set<GNode> findCellsWithMember(GNode gnode)
     {
-        Set<GNode> x = new HashSet<>() ;
-        
-        Iterator<Triple> iter = gnode.findable.find(Node.ANY, CAR, gnode.node) ;
-        for ( ; iter.hasNext() ; )
+        Set<GNode> x = new HashSet<>();
+
+        Iterator<Triple> iter = gnode.findable.find(Node.ANY, CAR, gnode.node);
+        for (; iter.hasNext(); )
         {
-            Triple t = iter.next() ;
-            x.add(new GNode(gnode, t.getSubject())) ;
+            Triple t = iter.next();
+            x.add(new GNode(gnode, t.getSubject()));
         }
-        NiceIterator.close(iter) ;
-        return x ;         
+        NiceIterator.close(iter);
+        return x;
     }
 
     private static GNode previous(GNode gnode)
     {
-        // reverse 
-        Node n = getNodeReverse(gnode, CDR) ;
+        // reverse
+        Node n = getNodeReverse(gnode, CDR);
         if ( n == null )
-            return null ;
-        return new GNode(gnode, n) ;
+            return null;
+        return new GNode(gnode, n);
     }
 
 
     private static Node getNodeReverse(GNode gnode, Node arc)
     {
-        Triple t = getTripleReverse(gnode, arc) ;
+        Triple t = getTripleReverse(gnode, arc);
         if ( t == null )
-            return null ;
-        return t.getSubject() ;
+            return null;
+        return t.getSubject();
     }
 
     private static Triple getTripleReverse(GNode gnode, Node arc)
     {
-        Iterator<Triple> iter = gnode.findable.find(Node.ANY, arc, gnode.node) ;
+        Iterator<Triple> iter = gnode.findable.find(Node.ANY, arc, gnode.node);
         if ( ! iter.hasNext() )
-            return null ;
-        Triple t = iter.next() ;
+            return null;
+        Triple t = iter.next();
         if ( iter.hasNext() )
-            Log.warn(GraphList.class, "Unusual list: two arcs with same property ("+arc+")") ;
-        NiceIterator.close(iter) ;
-        return t ;    
+            Log.warn(GraphList.class, "Unusual list: two arcs with same property ("+arc+")");
+        NiceIterator.close(iter);
+        return t;
     }
 
     // ---------------------------------------------
-    
+
     /** Calculate ?s list:member ?o as if it were a graph.find */
     public static Iterator<Triple> listMember(Graph graph, final Node s, Node o) {
         if ( isAny(s) ) {
-            Set<Node> x = findAllLists(graph) ;
-            IteratorConcat<Triple> iterConcat = new IteratorConcat<>() ;
+            Set<Node> x = findAllLists(graph);
+            IteratorConcat<Triple> iterConcat = new IteratorConcat<>();
             for ( Node s2 : x ) {
-                Iterator<Triple> iter = listMember(graph, s2, o) ;
+                Iterator<Triple> iter = listMember(graph, s2, o);
                 if ( iter.hasNext() )
-                    iterConcat.add(iter); 
+                    iterConcat.add(iter);
             }
-            return iterConcat ;
+            return iterConcat;
         }
-        GNode gn = new GNode(graph, s) ;
+        GNode gn = new GNode(graph, s);
         if ( ! isAny(o) ) {
             if ( contains(gn, o) )
-                return Iter.singleton(Triple.create(s, ListPFunction.nListMember, o)) ;
+                return Iter.singleton(Triple.create(s, ListPFunction.nListMember, o));
             else
-                return Iter.nullIterator() ;
+                return Iter.nullIterator();
         }
-        List<Node> x = members(gn) ;
-        return Iter.map(x.iterator(), t -> Triple.create(s, ListPFunction.nListMember, t)) ;
+        List<Node> x = members(gn);
+        return Iter.map(x.iterator(), t -> Triple.create(s, ListPFunction.nListMember, t));
     }
 
     private static boolean isAny(Node x) {
-        return x == null || Node.ANY.equals(x) ; 
+        return x == null || Node.ANY.equals(x);
     }
-    
+
     public static List<Node> members(GNode gnode)
     {
-        List<Node> x = new ArrayList<>() ;
-        members(gnode, x) ;
-        return x ;
+        List<Node> x = new ArrayList<>();
+        members(gnode, x);
+        return x;
     }
-    
+
     public static void members(GNode gnode, final Collection<Node> acc)
     {
         if ( ! isListNode(gnode) )
-            return ;
-        
+            return;
+
         while( ! listEnd(gnode) )
         {
-            Node n = car(gnode) ;
+            Node n = car(gnode);
             if ( n != null )
-                acc.add(n) ;
-            gnode = next(gnode) ;
+                acc.add(n);
+            gnode = next(gnode);
         }
     }
-    
+
     public static int length(GNode gnode)
     {
         if ( ! isListNode(gnode) )
-            return -1 ;
-        
-        int len = 0 ;
+            return -1;
+
+        int len = 0;
         while ( ! listEnd(gnode) )
         {
-            len++ ;
-            gnode = next(gnode) ;
+            len++;
+            gnode = next(gnode);
         }
-        return len ;
+        return len;
     }
-    
+
     public static int occurs(GNode gnode, Node item)
-    { return indexes(gnode, item).size() ; }
-    
+    { return indexes(gnode, item).size(); }
+
     public static boolean contains(GNode gnode, Node item)
-    { return index(gnode, item) >= 0 ; } 
-    
+    { return index(gnode, item) >= 0; }
+
     public static Node get(GNode gnode, int idx)
     {
 //        if ( idx == 0 )
-//            return car(gnode) ;
-//        Node n = next(gnode) ;
-//        return get(graph, n, idx-1) ;
-        
+//            return car(gnode);
+//        Node n = next(gnode);
+//        return get(graph, n, idx-1);
+
         if ( ! isListNode(gnode) )
-            return null ;
-        
+            return null;
+
         while ( ! listEnd(gnode) )
         {
             if ( idx == 0 )
-                return car(gnode) ;
-            gnode = next(gnode) ;
-            idx -- ;
+                return car(gnode);
+            gnode = next(gnode);
+            idx --;
         }
-        return null ;
+        return null;
     }
-    
+
     public static int index(GNode gnode, Node value)
     {
         if ( ! isListNode(gnode) )
-            return -1 ;
-        
-        int idx = 0 ;
+            return -1;
+
+        int idx = 0;
         while ( ! listEnd(gnode) )
         {
-            Node v = car(gnode) ;
+            Node v = car(gnode);
             if ( v != null && v.equals(value) )
-                return idx ;
-            gnode = next(gnode) ;
-            idx++ ;
+                return idx;
+            gnode = next(gnode);
+            idx++;
         }
-        return -1 ;
+        return -1;
     }
-    
+
     public static List<Integer> indexes(GNode gnode, Node value)
     {
-        List<Integer> x = new ArrayList<>() ;
-        
+        List<Integer> x = new ArrayList<>();
+
         if ( ! isListNode(gnode) )
-            return x ;
-        
-        int idx = 0 ;
+            return x;
+
+        int idx = 0;
         while ( ! listEnd(gnode) )
         {
-            Node v = car(gnode) ;
+            Node v = car(gnode);
             if ( v != null && v.equals(value) )
-                x.add(idx) ;
-            gnode = next(gnode) ;
-            idx++ ;
+                x.add(idx);
+            gnode = next(gnode);
+            idx++;
         }
-        return x ;
+        return x;
     }
-    
+
     public static void triples(GNode gnode, Collection<Triple> acc)
     {
         if ( listEnd(gnode) )
-            return ;
-        
-        Triple t = null ;
-        t = getTriple(gnode, CAR) ;
+            return;
+
+        Triple t = null;
+        t = getTriple(gnode, CAR);
         if ( t != null )
-            acc.add(t) ;
-        t = getTriple(gnode, CDR) ;
+            acc.add(t);
+        t = getTriple(gnode, CDR);
         if ( t != null )
-            acc.add(t) ;
+            acc.add(t);
     }
 
     public static List<Triple> allTriples(GNode gnode)
     {
-        List<Triple> x = new ArrayList<>() ;
-        allTriples(gnode, x) ;
-        return x ;
+        List<Triple> x = new ArrayList<>();
+        allTriples(gnode, x);
+        return x;
     }
-    
+
     public static void allTriples(GNode gnode, Collection<Triple> acc)
     {
         if ( ! isListNode(gnode) )
-          return ;
-        
+          return;
+
         while( ! listEnd(gnode) )
         {
-            triples(gnode, acc) ;
-            gnode = next(gnode) ;
+            triples(gnode, acc);
+            gnode = next(gnode);
         }
     }
-    
+
     /** Expensive operation to find all the likely looking list heads in a model */
     public static Set<Node> findAllLists(Graph graph)
     {
         // All except rdf:nil.
-        
-        Set<Node> acc = new HashSet<>() ;
+
+        Set<Node> acc = new HashSet<>();
         // A list head is a node with a rdf:rest from it, not but rdf:rest to it.
-        Iterator<Triple> iter = graph.find(Node.ANY, CDR, Node.ANY) ;
+        Iterator<Triple> iter = graph.find(Node.ANY, CDR, Node.ANY);
         try {
-            for ( ; iter.hasNext() ; )
+            for (; iter.hasNext(); )
             {
                 Triple t = iter.next();
-                Node node = t.getSubject() ;
+                Node node = t.getSubject();
                 if ( ! graph.contains(Node.ANY, CDR, node) )
-                    acc.add(node) ;
+                    acc.add(node);
             }
-        } finally { NiceIterator.close(iter) ; }
-        
-        
+        } finally { NiceIterator.close(iter); }
+
+
         // Find any rdf:nil lists (which are not pure tails)
-        iter = graph.find(Node.ANY, Node.ANY, NIL) ;
+        iter = graph.find(Node.ANY, Node.ANY, NIL);
         try {
-            for ( ; iter.hasNext() ; )
+            for (; iter.hasNext(); )
             {
                 Triple t = iter.next();
                 if ( ! t.getPredicate().equals(CDR) )
                 {
-                    acc.add(NIL) ;
-                    break ;
+                    acc.add(NIL);
+                    break;
                 }
             }
-        } finally { NiceIterator.close(iter) ; }
-        
-        
+        } finally { NiceIterator.close(iter); }
+
+
         if ( graph.contains(NIL, Node.ANY, Node.ANY) )
-            acc.add(NIL) ;
-        
-        return acc ;
+            acc.add(NIL);
+
+        return acc;
     }
-    
-    /** Convert a list of nodes into triples, placing them in BPG, returning the head of the list*/
-    public static Node listToTriples(List<Node> list, BasicPattern bgp)
-    {
+
+    /**
+     * Convert a list of nodes into triples, placing them in BPG, returning the head
+     * of the list
+     */
+    public static Node listToTriples(List<Node> list, BasicPattern bgp) {
         // List ...
         if ( list.size() == 0 )
-            return RDF.Nodes.nil ;
-        
-        Node head = NodeFactory.createBlankNode() ;
-        Node n = head ;
-        for ( Node elt : list )
-        {
+            return RDF.Nodes.nil;
+
+        Node head = NodeFactory.createBlankNode();
+        Node n = head;
+        for ( Node elt : list ) {
             // Cell:
-            Node consCell = NodeFactory.createBlankNode() ;
+            Node consCell = NodeFactory.createBlankNode();
             // Last cell to this one.
-            Triple t = Triple.create(n, RDF.Nodes.rest, consCell) ;
-            Triple t1 = Triple.create(consCell, RDF.Nodes.first, elt) ;
-            n = consCell ;
-            bgp.add(t) ;
-            bgp.add(t1) ;
+            Triple t = Triple.create(n, RDF.Nodes.rest, consCell);
+            Triple t1 = Triple.create(consCell, RDF.Nodes.first, elt);
+            n = consCell;
+            bgp.add(t);
+            bgp.add(t1);
         }
         // Finish list.
-        Triple t = Triple.create(n, RDF.Nodes.rest, RDF.Nodes.nil) ;
-        bgp.add(t) ;
-        return head ;
+        Triple t = Triple.create(n, RDF.Nodes.rest, RDF.Nodes.nil);
+        bgp.add(t);
+        return head;
     }
-    
-    private static final Node CAR = RDF.first.asNode() ;
-    private static final Node CDR = RDF.rest.asNode() ;
-    private static final Node NIL = RDF.nil.asNode() ;
 
-    private static GNode next(GNode gnode) { return new GNode(gnode, cdr(gnode)) ; }
+    private static final Node CAR = RDF.first.asNode();
+    private static final Node CDR = RDF.rest.asNode();
+    private static final Node NIL = RDF.nil.asNode();
+
+    private static GNode next(GNode gnode) { return new GNode(gnode, cdr(gnode)); }
 
     public static boolean isListNode (GNode gnode)
-    { return gnode.node.equals(NIL) || isCons(gnode) ; }
+    { return gnode.node.equals(NIL) || isCons(gnode); }
 
     private static boolean isCons (GNode gnode)
-    { return gnode.findable.contains(gnode.node, CDR, null) ; }
-    
+    { return gnode.findable.contains(gnode.node, CDR, null); }
+
     private static boolean listEnd (GNode gnode)
-    { return gnode.node == null || gnode.node.equals(NIL) ; }
-    
-    private static Node car(GNode gnode)     { return getNode(gnode, CAR) ; } 
-    private static Node cdr(GNode gnode)     { return getNode(gnode, CDR) ; }
-    private static Node getNode(GNode gnode, Node arc)
-    {
+    { return gnode.node == null || gnode.node.equals(NIL); }
+
+    private static Node car(GNode gnode)     { return getNode(gnode, CAR); }
+    private static Node cdr(GNode gnode)     { return getNode(gnode, CDR); }
+
+    private static Node getNode(GNode gnode, Node arc) {
         if ( listEnd(gnode) )
-            return null ;
-        Triple t = getTriple(gnode, arc) ;
+            return null;
+        Triple t = getTriple(gnode, arc);
         if ( t == null )
-            return null ;
-        return t.getObject() ;
+            return null;
+        return t.getObject();
     }
 
-    private static Triple getTriple(GNode gnode, Node arc)
-    {
+    private static Triple getTriple(GNode gnode, Node arc) {
         if ( listEnd(gnode) )
-            return null ;
-        
-        Iterator<Triple> iter = gnode.findable.find(gnode.node, arc, Node.ANY) ;
-        if ( ! iter.hasNext() )
-            return null ;
-        Triple t = iter.next() ;
+            return null;
+
+        Iterator<Triple> iter = gnode.findable.find(gnode.node, arc, Node.ANY);
+        if ( !iter.hasNext() )
+            return null;
+        Triple t = iter.next();
         if ( iter.hasNext() )
-            Log.warn(GraphList.class, "Unusual list: two arcs with same property ("+arc+")") ;
-        NiceIterator.close(iter) ;
-        return t ;         
+            Log.warn(GraphList.class, "Unusual list: two arcs with same property (" + arc + ")");
+        NiceIterator.close(iter);
+        return t;
     }
 }
diff --git a/jena-arq/src/main/java/org/apache/jena/sparql/util/graph/GraphListenerBase.java b/jena-arq/src/main/java/org/apache/jena/sparql/util/graph/GraphListenerBase.java
deleted file mode 100644
index 4d752a8..0000000
--- a/jena-arq/src/main/java/org/apache/jena/sparql/util/graph/GraphListenerBase.java
+++ /dev/null
@@ -1,123 +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.jena.sparql.util.graph;
-
-import java.util.Iterator ;
-import java.util.List ;
-
-import org.apache.jena.graph.Graph ;
-import org.apache.jena.graph.GraphEvents ;
-import org.apache.jena.graph.GraphListener ;
-import org.apache.jena.graph.Triple ;
-
-/** Convert the full, wide GraphListener interface into something more specific to loading
- *  including flagging the start and finish of a load operation.
- */
-
-public abstract class GraphListenerBase implements GraphListener
-{
-    // ToDo: notifyAddGraph, notifyDeleteGraph
-    public GraphListenerBase() {}
-
-    @Override
-    public void notifyAddTriple(Graph g, Triple t) { addEvent(t) ; }
-
-    @Override
-    public void notifyAddArray(Graph g, Triple[] triples)
-    {
-        for ( Triple triple : triples )
-        {
-            addEvent( triple );
-        }
-//        for ( Triple t : triples )
-//            addEvent(t) ;
-    }
-
-    @Override
-    public void notifyAddList(Graph g, List<Triple> triples) 
-    { 
-        notifyAddIterator(g, triples.iterator()) ;
-    }
-
-    @Override
-    public void notifyAddIterator(Graph g, Iterator<Triple> it)
-    {
-        for ( ; it.hasNext() ; )
-            addEvent(it.next()) ;
-    }
-
-    @Override
-    public void notifyAddGraph(Graph g, Graph added)
-    {}
-
-    @Override
-    public void notifyDeleteTriple(Graph g, Triple t)
-    { deleteEvent(t) ; }
-
-    @Override
-    public void notifyDeleteList(Graph g, List<Triple> triples)
-    {
-        notifyDeleteIterator(g, triples.iterator()) ;
-    }
-
-    @Override
-    public void notifyDeleteArray(Graph g, Triple[] triples)
-    {
-        for ( Triple triple : triples )
-        {
-            deleteEvent( triple );
-        }
-//        for ( Triple t : triples )
-//            deleteEvent(t) ;
-    }
-
-    @Override
-    public void notifyDeleteIterator(Graph g, Iterator<Triple> it)
-    {
-        for ( ; it.hasNext() ; )
-            deleteEvent(it.next()) ;
-    }
-
-    @Override
-    public void notifyDeleteGraph(Graph g, Graph removed)
-    {}
-    
-    protected abstract void addEvent(Triple t) ;
-
-    protected abstract void deleteEvent(Triple t) ;
-    
-    // --------
-
-//    @Override
-    @Override
-    public void notifyEvent(Graph source, Object value)
-    {
-        if ( value.equals(GraphEvents.startRead) )
-            startRead() ;
-        else if ( value.equals(GraphEvents.finishRead) )
-            finishRead() ;
-        //super.notifyEvent(source, value) ;
-    }
-
-    protected void startRead()
-    {}
-            
-    protected void finishRead()
-    {}
-}
diff --git a/jena-arq/src/main/java/org/apache/jena/sparql/util/graph/GraphListenerCounter.java b/jena-arq/src/main/java/org/apache/jena/sparql/util/graph/GraphListenerCounter.java
deleted file mode 100644
index 71c28ef..0000000
--- a/jena-arq/src/main/java/org/apache/jena/sparql/util/graph/GraphListenerCounter.java
+++ /dev/null
@@ -1,105 +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.jena.sparql.util.graph;
-
-import org.apache.jena.graph.Graph ;
-import org.apache.jena.graph.Triple ;
-
-/** Adds a regular "tick" based on the number of adds or deletes seen.
- *  The additions and deletions ticks are independent.  
- */
-
-public abstract class GraphListenerCounter extends GraphListenerBase
-{
-    private long addCount = 0 ;
-    private long deleteCount = 0 ;
-
-    private long addTicks = 0 ;
-    private long deleteTicks = 0 ;
-    
-    private final int addNotePoint ;
-    private final int deleteNotePoint ;
-
-    /** Create a listener that "ticks" on additions to the graph (-1 means "off")
-     * 
-     * @param addTickCount
-     */    
-    public GraphListenerCounter(int addTickCount)
-    {
-        this(addTickCount, -1) ;
-    }
-    
-    /** Create a listener that "ticks" on additions and deletions
-     *  (in each case, -1 means "off")
-     * 
-     * @param addTickCount      Notification tick for additions to the graph
-     * @param deleteTickCount   Notification tick for deletions to the graph
-     */
-    public GraphListenerCounter(int addTickCount, int deleteTickCount)
-    {
-        this.addNotePoint = addTickCount ;
-        this.deleteNotePoint = deleteTickCount ;
-    }
-    
-    public void reset()
-    { 
-        addCount = 0 ;
-        deleteCount = 0 ; 
-    }
-
-    @Override
-    public void notifyEvent(Graph source, Object value)
-    {
-        super.notifyEvent(source, value) ;
-    }
-
-    @Override
-    protected void addEvent(Triple t)
-    {
-        addCount++ ;
-        if ( addNotePoint > 0 && (addCount%addNotePoint) == 0 )
-        {
-            addTicks++ ;
-            addTick() ;
-        }
-    }
-
-    @Override
-    protected void deleteEvent(Triple t)
-    {
-        deleteCount++ ;
-        if ( deleteNotePoint > 0 && (deleteCount%deleteNotePoint) == 0 )
-        {
-            deleteTicks++ ;
-            deleteTick() ;
-        }
-    }
-
-    public final int getAddTickSize() { return addNotePoint ; }
-    public final int getDeleteTickSize() { return deleteNotePoint ; }
-    
-    public final long getAddCount() { return addCount ; }
-    public final long getDeleteCount() { return deleteCount ; }
-
-    public final long getAddTicks() { return addTicks ; }
-    public final long getDeleteTicks() { return deleteTicks ; }
-
-    protected abstract void deleteTick() ;
-    protected abstract void addTick() ;
-}
diff --git a/jena-arq/src/main/java/org/apache/jena/sparql/util/graph/GraphLoadMonitor.java b/jena-arq/src/main/java/org/apache/jena/sparql/util/graph/GraphLoadMonitor.java
deleted file mode 100644
index f0d924a..0000000
--- a/jena-arq/src/main/java/org/apache/jena/sparql/util/graph/GraphLoadMonitor.java
+++ /dev/null
@@ -1,148 +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.jena.sparql.util.graph;
-
-import java.util.Date ;
-
-import org.apache.jena.atlas.lib.Timer ;
-import org.apache.jena.sparql.util.StringUtils ;
-
-// To be retired.
-// Use a sink instead.
-public class GraphLoadMonitor extends GraphListenerCounter
-{
-    Timer timer = null ;
-    private long lastTime = 0 ;
-    private boolean displayMemory = false ;
-    String label = null ;
-    String summaryLabel = null ;
- 
-        
-    public GraphLoadMonitor(int addNotePoint, boolean displayMemory)
-    {
-        super(addNotePoint) ;
-        this.displayMemory = displayMemory ;
-        resetTimer() ;
-    }
-    
-    public void setLabel(String label) { this.label = label ; }
-    public void setSummaryLabel(String label) { this.summaryLabel = label ; }
-    
-    public void startMonitor()
-    {
-        resetTimer() ;
-    }
-    
-    public void finishMonitor()
-    {
-        if ( timer != null )
-            timer.endTimer() ;
-    }
-    
-    public void resetTimer()
-    {
-        if ( timer != null )
-            timer.endTimer() ;
-        timer = new Timer() ;
-        timer.startTimer();
-    }
-
-    public long triplesLoaded() { return getAddCount() ; }
-    
-    @Override
-    protected void addTick()
-    {
-        long soFar = timer.readTimer() ;
-        long thisTime = soFar - lastTime ;
-        long count = getAddCount() ;
-        long ticks = getAddTicks() ;
-
-        // *1000L is milli to second conversion
-        //   addNotePoint/ (thisTime/1000L)
-        long tpsBatch = (getAddTickSize() * 1000L) / thisTime;
-        long tpsAvg = (count * 1000L) / soFar;
-
-        String msg = "Add: "+num(count)+" triples  (Batch: "+num(tpsBatch)+" / Run: "+num(tpsAvg)+")" ;
-        if ( label != null )
-            msg = msg+label ;
-        if ( displayMemory )
-        {
-            long mem = Runtime.getRuntime().totalMemory() ;
-            long free = Runtime.getRuntime().freeMemory() ;
-            msg = msg+"   [M:"+num(mem)+"/F:"+num(free)+"]" ;
-        }
-        println(label, msg) ;
-
-        if ( ticks > 0 && (ticks%10) == 0 )
-        {
-            String x = num(soFar/1000F) ;
-            String timestamp = StringUtils.str(new Date()) ; 
-            println(label, "  Elapsed: "+x+" seconds ["+timestamp+"]") ;
-        }
-
-        lastTime = soFar ;        
-    }
-
-    private static String num(long v)
-    {
-        return StringUtils.str(v) ;
-    }
-    
-    private static String num(float value)
-    {
-        return StringUtils.str(value) ;
-    }
-    
-    @Override
-    protected void deleteTick()
-    {}
-    
-    @Override
-    protected void startRead()
-    { startMonitor() ; }
-    
-            
-    @Override
-    protected void finishRead()
-    {
-        finishMonitor() ;
-        printAtEnd() ;
-    }
-    
-    private void printAtEnd()
-    {
-        long timeMilli = timer.getTimeInterval() ;
-        println(summaryLabel, num(getAddCount())+
-                              " triples: loaded in "+
-                              num(timeMilli/1000.0F)+
-                              " seconds ["+
-                              num(1000F*getAddCount()/timeMilli)+
-                              " triples/s]") ;
-    }
-    
-    private static void println(String label, String line)
-    {
-        if ( label != null )
-            System.out.print(label) ;
-        System.out.println(line) ;
-    }
-    
-    
-    
-}
diff --git a/jena-arq/src/main/java/org/apache/jena/sparql/util/graph/GraphUtils.java b/jena-arq/src/main/java/org/apache/jena/sparql/util/graph/GraphUtils.java
index 62f4e30..d73cb4e 100644
--- a/jena-arq/src/main/java/org/apache/jena/sparql/util/graph/GraphUtils.java
+++ b/jena-arq/src/main/java/org/apache/jena/sparql/util/graph/GraphUtils.java
@@ -16,25 +16,25 @@
  * limitations under the License.
  */
 
-package org.apache.jena.sparql.util.graph ;
+package org.apache.jena.sparql.util.graph;
 
 import java.util.*;
 
-import org.apache.jena.atlas.iterator.Iter ;
+import org.apache.jena.atlas.iterator.Iter;
 import org.apache.jena.atlas.lib.ListUtils;
-import org.apache.jena.graph.Graph ;
-import org.apache.jena.graph.Node ;
-import org.apache.jena.graph.Triple ;
-import org.apache.jena.query.* ;
-import org.apache.jena.rdf.model.* ;
+import org.apache.jena.graph.Graph;
+import org.apache.jena.graph.Node;
+import org.apache.jena.graph.Triple;
+import org.apache.jena.query.*;
+import org.apache.jena.rdf.model.*;
 import org.apache.jena.shared.PropertyNotFoundException;
-import org.apache.jena.sparql.util.NotUniqueException ;
-import org.apache.jena.sparql.util.PropertyRequiredException ;
+import org.apache.jena.sparql.util.NotUniqueException;
+import org.apache.jena.sparql.util.PropertyRequiredException;
 import org.apache.jena.sparql.util.QueryExecUtils;
-import org.apache.jena.sparql.util.TypeNotUniqueException ;
-import org.apache.jena.util.iterator.ExtendedIterator ;
+import org.apache.jena.sparql.util.TypeNotUniqueException;
+import org.apache.jena.util.iterator.ExtendedIterator;
 import org.apache.jena.util.iterator.NiceIterator;
-import org.apache.jena.vocabulary.RDF ;
+import org.apache.jena.vocabulary.RDF;
 
 /** Graph utilities. See also GraphFactory. */
 
@@ -46,103 +46,103 @@
      * Get all the literals for a resource-property.
      */
     public static List<String> multiValueString(Resource r, Property p) {
-        List<RDFNode> nodes = multiValue(r, p) ;
-        List<String> values = new ArrayList<>() ;
+        List<RDFNode> nodes = multiValue(r, p);
+        List<String> values = new ArrayList<>();
 
         for ( RDFNode n : nodes ) {
             if ( n.isLiteral() ) {
-                values.add(((Literal)n).getString()) ;
+                values.add(((Literal)n).getString());
             }
         }
-        return values ;
+        return values;
     }
 
     /** Get a list of the URIs (as strings) and strings
      *  @see #getAsStringValue
      */
     public static List<String> multiValueAsString(Resource r, Property p) {
-        List<RDFNode> nodes = multiValue(r, p) ;
-        List<String> values = new ArrayList<>() ;
+        List<RDFNode> nodes = multiValue(r, p);
+        List<String> values = new ArrayList<>();
 
         for ( RDFNode n : nodes ) {
             if ( n.isLiteral() ) {
-                values.add(((Literal)n).getString()) ;
+                values.add(((Literal)n).getString());
             }
             if ( n.isURIResource() ) {
                 values.add(((Resource)n).getURI());
             }
         }
-        return values ;
+        return values;
     }
 
     public static List<RDFNode> multiValue(Resource r, Property p) {
-        List<RDFNode> values = new ArrayList<>() ;
-        StmtIterator sIter = r.listProperties(p) ;
+        List<RDFNode> values = new ArrayList<>();
+        StmtIterator sIter = r.listProperties(p);
         while (sIter.hasNext()) {
-            Statement s = sIter.nextStatement() ;
-            values.add(s.getObject()) ;
+            Statement s = sIter.nextStatement();
+            values.add(s.getObject());
         }
-        return values ;
+        return values;
     }
 
     public static List<Resource> multiValueResource(Resource r, Property p) {
-        List<RDFNode> nodes = multiValue(r, p) ;
-        List<Resource> values = new ArrayList<>() ;
+        List<RDFNode> nodes = multiValue(r, p);
+        List<Resource> values = new ArrayList<>();
 
         for ( RDFNode n : nodes ) {
             if ( n.isResource() ) {
-                values.add((Resource)n) ;
+                values.add((Resource)n);
             }
         }
-        return values ;
+        return values;
     }
 
     public static List<String> multiValueURI(Resource r, Property p) {
-        List<RDFNode> nodes = multiValue(r, p) ;
-        List<String> values = new ArrayList<>() ;
+        List<RDFNode> nodes = multiValue(r, p);
+        List<String> values = new ArrayList<>();
 
         for ( RDFNode n : nodes ) {
             if ( n.isURIResource() ) {
-                values.add(((Resource)n).getURI()) ;
+                values.add(((Resource)n).getURI());
             }
         }
-        return values ;
+        return values;
     }
 
     public static boolean exactlyOneProperty(Resource r, Property p) {
-        StmtIterator sIter = r.listProperties(p) ;
+        StmtIterator sIter = r.listProperties(p);
         try {
             if ( !sIter.hasNext() )
-                throw new PropertyRequiredException(r, p) ;
-            sIter.next() ;
+                throw new PropertyRequiredException(r, p);
+            sIter.next();
             if ( sIter.hasNext() )
-                throw new NotUniqueException(r, p) ;
+                throw new NotUniqueException(r, p);
         }
         finally {
-            sIter.close() ;
+            sIter.close();
         }
-        return true ;
+        return true;
     }
 
     public static boolean atmostOneProperty(Resource r, Property p) {
-        StmtIterator sIter = r.listProperties(p) ;
+        StmtIterator sIter = r.listProperties(p);
         try {
             if ( !sIter.hasNext() )
-                return true ;
-            sIter.next() ;
+                return true;
+            sIter.next();
             if ( sIter.hasNext() )
-                throw new NotUniqueException(r, p) ;
+                throw new NotUniqueException(r, p);
         }
         finally {
-            sIter.close() ;
+            sIter.close();
         }
-        return true ;
+        return true;
     }
 
     public static boolean getBooleanValue(Resource r, Property p) {
         if ( !GraphUtils.atmostOneProperty(r, p) )
-            throw new NotUniqueException(r, p) ;
-        Statement s = r.getProperty(p) ;
+            throw new NotUniqueException(r, p);
+        Statement s = r.getProperty(p);
         if ( s == null )
             throw new PropertyNotFoundException(p);
         return s.getBoolean();
@@ -162,7 +162,7 @@
         if ( obj == null )
             return null;
         if ( obj.isResource() )
-            return obj.asResource().getURI() ;
+            return obj.asResource().getURI();
         if ( obj.isLiteral() )
             return obj.asLiteral().getString();
         throw new UnsupportedOperationException("Not a URI or a string");
@@ -170,47 +170,47 @@
 
     public static RDFNode getAsRDFNode(Resource r, Property p) {
         if ( !atmostOneProperty(r, p) )
-            throw new NotUniqueException(r, p) ;
-        Statement s = r.getProperty(p) ;
+            throw new NotUniqueException(r, p);
+        Statement s = r.getProperty(p);
         if ( s == null )
-            return null ;
+            return null;
         return s.getObject();
     }
 
     public static Resource getResourceValue(Resource r, Property p) {
         if ( !atmostOneProperty(r, p) )
-            throw new NotUniqueException(r, p) ;
-        Statement s = r.getProperty(p) ;
+            throw new NotUniqueException(r, p);
+        Statement s = r.getProperty(p);
         if ( s == null )
-            return null ;
-        return s.getResource() ;
+            return null;
+        return s.getResource();
     }
 
     public static List<Resource> listResourcesByType(Model model, Resource type) {
-        return Iter.toList(model.listSubjectsWithProperty(RDF.type, type)) ;
+        return Iter.toList(model.listSubjectsWithProperty(RDF.type, type));
     }
 
     public static Resource getResourceByType(Model model, Resource type) {
-        ResIterator sIter = model.listSubjectsWithProperty(RDF.type, type) ;
+        ResIterator sIter = model.listSubjectsWithProperty(RDF.type, type);
         if ( !sIter.hasNext() )
-            return null ;
+            return null;
         Resource r = sIter.next();
         if ( sIter.hasNext() )
-            throw new TypeNotUniqueException(r) ;
-        return r ;
+            throw new TypeNotUniqueException(r);
+        return r;
     }
 
     public static Resource findRootByType(Model model, Resource atype) {
         String s = String.join("\n",
             "PREFIX  rdf:    <http://www.w3.org/1999/02/22-rdf-syntax-ns#>",
             "PREFIX  rdfs:   <http://www.w3.org/2000/01/rdf-schema#>",
-            "SELECT DISTINCT ?root { { ?root rdf:type ?ATYPE } UNION { ?root rdf:type ?t . ?t rdfs:subClassOf ?ATYPE } }") ;
-        Query q = QueryFactory.create(s) ;
-        QuerySolutionMap qsm = new QuerySolutionMap() ;
-        qsm.add("ATYPE", atype) ;
+            "SELECT DISTINCT ?root { { ?root rdf:type ?ATYPE } UNION { ?root rdf:type ?t . ?t rdfs:subClassOf ?ATYPE } }");
+        Query q = QueryFactory.create(s);
+        QuerySolutionMap qsm = new QuerySolutionMap();
+        qsm.add("ATYPE", atype);
 
         try(QueryExecution qExec = QueryExecution.model(model).query(q).initialBinding(qsm).build() ) {
-            return (Resource)QueryExecUtils.getAtMostOne(qExec, "root") ;
+            return (Resource)QueryExecUtils.getAtMostOne(qExec, "root");
         }
     }
 
@@ -218,10 +218,10 @@
         String s = String.join("\n",
             "PREFIX  rdf:    <http://www.w3.org/1999/02/22-rdf-syntax-ns#>",
             "PREFIX  rdfs:   <http://www.w3.org/2000/01/rdf-schema#>",
-            "SELECT DISTINCT ?root { { ?root rdf:type ?ATYPE } UNION { ?root rdf:type ?t . ?t rdfs:subClassOf ?ATYPE } }") ;
-        Query q = QueryFactory.create(s) ;
-        QuerySolutionMap qsm = new QuerySolutionMap() ;
-        qsm.add("ATYPE", atype) ;
+            "SELECT DISTINCT ?root { { ?root rdf:type ?ATYPE } UNION { ?root rdf:type ?t . ?t rdfs:subClassOf ?ATYPE } }");
+        Query q = QueryFactory.create(s);
+        QuerySolutionMap qsm = new QuerySolutionMap();
+        qsm.add("ATYPE", atype);
         try(QueryExecution qExec = QueryExecution.model(model).query(q).initialBinding(qsm).build() ) {
             return ListUtils.toList(
                     QueryExecUtils.getAll(qExec, "root").stream().map(r->(Resource)r));
@@ -230,12 +230,12 @@
     }
 
     public static String fmtURI(Resource r) {
-        return r.getModel().shortForm(r.getURI()) ;
+        return r.getModel().shortForm(r.getURI());
     }
 
     /** All subjects and objects, no duplicates. */
     public static Iterator<Node> allNodes(Graph graph) {
-        ExtendedIterator<Triple> iter = graph.find(Node.ANY, Node.ANY, Node.ANY) ;
+        ExtendedIterator<Triple> iter = graph.find(Node.ANY, Node.ANY, Node.ANY);
         IterSO iterSO = new IterSO(iter);
         Iterator<Node> distinctIterator = Iter.distinct(iterSO);
         return distinctIterator;
diff --git a/jena-arq/src/main/java/org/apache/jena/system/buffering/BufferingDatasetGraph.java b/jena-arq/src/main/java/org/apache/jena/system/buffering/BufferingDatasetGraph.java
index 518af7a..e5b8cfb 100644
--- a/jena-arq/src/main/java/org/apache/jena/system/buffering/BufferingDatasetGraph.java
+++ b/jena-arq/src/main/java/org/apache/jena/system/buffering/BufferingDatasetGraph.java
@@ -70,6 +70,11 @@
     private Set<Quad>   addedQuads     = new HashSet<>();
     private Set<Quad>   deletedQuads   = new HashSet<>();
 
+    public Set<Triple> getAddedTriples()     { return addedTriples; }
+    public Set<Triple> getDeletedTriples()   { return deletedTriples; }
+    public Set<Quad>   getAddedQuads()       { return addedQuads; }
+    public Set<Quad>   getDeletedQuads()     { return deletedQuads; }
+
     private BufferingPrefixMap prefixes;
 
     // True  -> read-optimized.
diff --git a/jena-arq/src/main/resources/org/apache/jena/arq/arq-properties.xml b/jena-arq/src/main/resources/org/apache/jena/arq/arq-properties.xml
deleted file mode 100644
index 8cf2bcc..0000000
--- a/jena-arq/src/main/resources/org/apache/jena/arq/arq-properties.xml
+++ /dev/null
@@ -1,8 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!DOCTYPE properties SYSTEM "http://java.sun.com/dtd/properties.dtd">
-<!--  Licensed under the terms of http://www.apache.org/licenses/LICENSE-2.0 -->
-<properties version="1.0">
-  <comment>ARQ System Properties</comment>
-  <entry key="org.apache.jena.arq.version">${project.version}</entry>
-  <entry key="org.apache.jena.arq.build.datetime">${build.time.xsd}</entry>
-</properties>
diff --git a/jena-arq/src/test/java/org/apache/jena/riot/Scripts_AltTurtle.java b/jena-arq/src/test/java/org/apache/jena/riot/Scripts_AltTurtle.java
index e3dc217..d67c3c9 100644
--- a/jena-arq/src/test/java/org/apache/jena/riot/Scripts_AltTurtle.java
+++ b/jena-arq/src/test/java/org/apache/jena/riot/Scripts_AltTurtle.java
@@ -31,7 +31,7 @@
 /** Execute turtle test with alt parser. */
 
 @RunWith(RunnerRIOT.class)
-@Label("RIOT-TurtleJCC")
+@Label("RIOT-TurtleJCC Scripts")
 @Manifests({
     "testing/RIOT/Lang/TurtleStd/manifest.ttl",
     "testing/RIOT/Lang/Turtle2/manifest.ttl",
diff --git a/jena-arq/src/test/java/org/apache/jena/riot/Scripts_LangSuite.java b/jena-arq/src/test/java/org/apache/jena/riot/Scripts_LangSuite.java
index 5b6cc60..6501a1a 100644
--- a/jena-arq/src/test/java/org/apache/jena/riot/Scripts_LangSuite.java
+++ b/jena-arq/src/test/java/org/apache/jena/riot/Scripts_LangSuite.java
@@ -26,7 +26,7 @@
 /** The test suites - these are driven by a manifest file and use external files for tests */
 
 @RunWith(RunnerRIOT.class)
-@Label("RIOT")
+@Label("RIOT Scripts")
 @Manifests({
     "testing/RIOT/Lang/manifest-all.ttl"
 })
diff --git a/jena-arq/src/test/java/org/apache/jena/riot/TC_Riot.java b/jena-arq/src/test/java/org/apache/jena/riot/TC_Riot.java
index d1efe3f..3fcc750 100644
--- a/jena-arq/src/test/java/org/apache/jena/riot/TC_Riot.java
+++ b/jena-arq/src/test/java/org/apache/jena/riot/TC_Riot.java
@@ -50,7 +50,7 @@
     , TS_RDFProtobuf.class
     , TS_RDFThrift.class
     , TS_RowSetRIOT.class
-    // And scripted tests.
+    // Scripted tests in ARQTestSuite.
 })
 
 public class TC_Riot
diff --git a/jena-arq/src/test/java/org/apache/jena/sparql/util/TS_Util.java b/jena-arq/src/test/java/org/apache/jena/sparql/util/TS_Util.java
index f4734597..ce1137c 100644
--- a/jena-arq/src/test/java/org/apache/jena/sparql/util/TS_Util.java
+++ b/jena-arq/src/test/java/org/apache/jena/sparql/util/TS_Util.java
@@ -27,7 +27,6 @@
     TestDateTimeParsing.class ,
     TestList.class ,
     TestFmtUtils.class,
-    TestVersion.class,
     TestContextUtils.class,
     TestIsoMatcher.class
 })
diff --git a/jena-arq/src/test/java/org/apache/jena/sparql/util/TestVersion.java b/jena-arq/src/test/java/org/apache/jena/sparql/util/TestVersion.java
deleted file mode 100644
index 03589e9..0000000
--- a/jena-arq/src/test/java/org/apache/jena/sparql/util/TestVersion.java
+++ /dev/null
@@ -1,81 +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.jena.sparql.util;
-
-import org.apache.jena.atlas.io.IndentedLineBuffer ;
-import org.apache.jena.atlas.lib.Version ;
-import org.apache.jena.query.ARQ ;
-import org.apache.jena.riot.RIOT ;
-import org.junit.Assert ;
-import org.junit.Test ;
-
-/**
- * Tests for the {@link org.apache.jena.atlas.lib.Version} utility class
- * Done here so there is something to test.
- */
-public class TestVersion {
-
-    @Test
-    public void test_version_print_01() {
-        Version ver = new Version();
-        ver.addClass(ARQ.class);
-        
-        IndentedLineBuffer buffer = new IndentedLineBuffer();
-        ver.print(buffer);
-        
-        String info = buffer.asString();
-        Assert.assertNotNull(info);
-        Assert.assertTrue(info.contains("ARQ"));
-    }
-    
-    @Test
-    public void test_version_string_01() {
-        Version ver = new Version();
-        ver.addClass(ARQ.class);
-        ver.addClass(RIOT.class);
-        
-        String info = ver.toString();
-        Assert.assertNotNull(info);
-        Assert.assertTrue(info.contains("ARQ"));
-        Assert.assertTrue(info.contains("\n"));
-    }
-    
-    @Test
-    public void test_version_string_02() {
-        Version ver = new Version();
-        ver.addClass(ARQ.class);
-        ver.addClass(RIOT.class);
-        
-        String info = ver.toString(false);
-        Assert.assertNotNull(info);
-        Assert.assertTrue(info.contains("ARQ"));
-        Assert.assertTrue(info.contains("\n"));
-    }
-    
-    @Test
-    public void test_version_string_03() {
-        Version ver = new Version();
-        ver.addClass(ARQ.class);
-        
-        String info = ver.toString(true);
-        Assert.assertNotNull(info);
-        Assert.assertTrue(info.contains("ARQ"));
-        Assert.assertFalse(info.contains("\n"));
-    }
-}
diff --git a/jena-base/src/main/java/org/apache/jena/atlas/io/BlockUTF8.java b/jena-base/src/main/java/org/apache/jena/atlas/io/BlockUTF8.java
index aa56ac7..9a64c0b 100644
--- a/jena-base/src/main/java/org/apache/jena/atlas/io/BlockUTF8.java
+++ b/jena-base/src/main/java/org/apache/jena/atlas/io/BlockUTF8.java
@@ -58,7 +58,6 @@
      * 31   U+7FFFFFFF                        1111110x 10xxxxxx 10xxxxxx 10xxxxxx 10xxxxxx 10xxxxxx
      */
 
-
     /**
      * Convert the bytes in the ByteBuffer to characters in the CharBuffer. The
      * CharBuffer must be large enough.
@@ -137,6 +136,7 @@
                 // Looking like 4 byte character.
                 // 11110zzz => 4 bytes.
                 int ch = readMultiBytes(bb, x & 0x08, 4);
+
                 char chars[] = Character.toChars(ch);
                 cb.put(chars);
                 idx += 4;
@@ -192,9 +192,11 @@
                 bb.put((byte)x3);
                 continue;
             }
-            // if ( Character.isDefined(ch) )
-            //     throw new AtlasException("not a character");
-            // if ( true ) throw new InternalErrorException("Valid code point for Java but not encodable");
+
+            // End of Java.
+            // A Java char is 16 bit, unsigned, so it is between 0 and 0xFFFF.
+            // Unicode is defined for 0 to 0x10FFFF
+            // For reference the full 32 bits encodings are:
 
             if ( ch <= 0x1FFFFF ) {
                 // 21 bits : 11110xxx 10xxxxxx 10xxxxxx 10xxxxxx
diff --git a/jena-base/src/main/java/org/apache/jena/atlas/lib/Timer.java b/jena-base/src/main/java/org/apache/jena/atlas/lib/Timer.java
index 5f7852f..15dca75 100644
--- a/jena-base/src/main/java/org/apache/jena/atlas/lib/Timer.java
+++ b/jena-base/src/main/java/org/apache/jena/atlas/lib/Timer.java
@@ -29,12 +29,13 @@
 
     public Timer() {}
 
-    public void startTimer() {
+    public Timer startTimer() {
         if ( inTimer )
             throw new AtlasException("Already in timer");
         timeStart = System.currentTimeMillis();
         timeFinish = -1;
         inTimer = true;
+        return this;
     }
 
     /** Stop timing and return the elapsed time in milliseconds */
diff --git a/jena-base/src/main/java/org/apache/jena/atlas/lib/Version.java b/jena-base/src/main/java/org/apache/jena/atlas/lib/Version.java
index 2337605..81e8379 100644
--- a/jena-base/src/main/java/org/apache/jena/atlas/lib/Version.java
+++ b/jena-base/src/main/java/org/apache/jena/atlas/lib/Version.java
@@ -1,4 +1,4 @@
-/**
+/*
  * 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
@@ -18,122 +18,35 @@
 
 package org.apache.jena.atlas.lib;
 
-import java.lang.reflect.Field ;
-import java.util.ArrayList ;
-import java.util.Iterator ;
-import java.util.List ;
+import java.io.PrintStream;
+import java.util.Optional;
 
-import org.apache.jena.atlas.io.IndentedLineBuffer ;
-import org.apache.jena.atlas.io.IndentedWriter ;
+/** In support of version information. */
+public class Version {
 
-/** Manage version information for subsystems */
-public class Version
-{
-    private List<Class< ? >> classes = new ArrayList<>() ;
-    
-    /**
-     * Add a class to the version information
-     * @param c Class
-     */
-    public void addClass(Class< ? > c)
-    {
-        if ( ! classes.contains(c) ) 
-            classes.add(c) ;
-    }
-    
-    private static String FIELD_VERSION = "VERSION";
-    
-    private static String FIELD_BUILD_DATE = "BUILD_DATE";
-    
-    private static String[] fields = { /*"NAME",*/ FIELD_VERSION, FIELD_BUILD_DATE } ;
+    private Version() {}
 
     /**
-     * Prints version information for all registered classes to the given writer
-     * @param writer Writer to print version information to
+     * Return the version of a class.
+     * <p>
+     * This depends on the class being in a jar with a
+     * manifest that has the version field.
+     * <p>
+     * Otherwise return {@link Optional#empty()}.
      */
-    public void print(IndentedWriter writer) {
-        for ( Class<?> c : classes ) {
-            String x = Lib.classShortName( c );
-            fields( writer, x, c );
-        }
+    public static Optional<String> versionForClass(Class<?> cls) {
+        String x = cls.getPackage().getImplementationVersion();
+        return Optional.ofNullable(x);
     }
 
-    private static void fields(IndentedWriter writer, String prefix, Class< ? > cls)
-    {
-        for ( String field : fields )
-            printField( writer, prefix, field, cls );
-    }
-    
-    private static String field(String fieldName, Class<? > cls) {
-        try {
-            Field f = cls.getDeclaredField(fieldName) ;
-            Object val = f.get(null) ;
-            if ( val == null )
-                return null ;
-            return val.toString() ;
-        }
-        catch (IllegalArgumentException ex) {
-            ex.printStackTrace() ;
-        }
-        catch (IllegalAccessException ex) {
-            ex.printStackTrace() ;
-        }
-        catch (SecurityException ex) {
-            ex.printStackTrace() ;
-        }
-        catch (NoSuchFieldException ex) {
-            ex.printStackTrace() ;
-        }
-        return "<error>" ;
+    public static void printVersion(PrintStream out, String system, Optional<String> versionString) {
+        printVersion(out, system, versionString.orElse("<development>"));
     }
 
-    private static void printField(IndentedWriter out, String prefix, String fieldName, Class<? > cls) {
-        String str = field(fieldName, cls) ;
-        if ( str == null )
-            return ;
-        out.print(prefix) ;
-        out.print(": ") ;
-        out.pad(12) ;
-        out.print(fieldName) ;
-        out.print(": ") ;
-        out.print(field(fieldName, cls)) ;
-        out.println() ;
-        out.flush() ;
-    }
-    
-    /**
-     * Gets user friendly version information for all registered classes as a string
-     * @param singleLine Whether to print to a single line
-     * @return Version information
-     */
-    public String toString(boolean singleLine) {
-        try ( IndentedLineBuffer buffer = new IndentedLineBuffer(false) ) {
-            Iterator<Class<?>> iter = classes.iterator();
-            while (iter.hasNext())
-            {
-                Class<?> c = iter.next();
-                String component = Lib.classShortName(c) ;
-                String version = field(FIELD_VERSION, c);
-                String timestamp = field(FIELD_BUILD_DATE, c);
-                buffer.append("%s Version %s (Built %s)", component, version, timestamp);
-                if (iter.hasNext()) {
-                    if (!singleLine) {
-                        buffer.println();
-                    } else {
-                        buffer.print(", ");
-                    }
-                }
-            }
-
-            return buffer.asString();
-        }
-    }
-    
-    /**
-     * Gets user friendly version information for all registered classes as a string
-     */
-    @Override
-    public String toString() {
-        return this.toString(false);
+    public static void printVersion(PrintStream out, String system, String versionString) {
+        if ( system == null )
+            out.printf("Apache Jena version %s\n", versionString);
+        else
+            out.printf("Apache Jena %s version %s\n", system, versionString);
     }
 }
diff --git a/jena-base/src/test/java/org/apache/jena/atlas/lib/TS_Lib.java b/jena-base/src/test/java/org/apache/jena/atlas/lib/TS_Lib.java
index 87abe6e..9352e95 100644
--- a/jena-base/src/test/java/org/apache/jena/atlas/lib/TS_Lib.java
+++ b/jena-base/src/test/java/org/apache/jena/atlas/lib/TS_Lib.java
@@ -50,6 +50,7 @@
     , TestDateTimeUtils.class
     , TestCacheSimple.class
     , TestRefCountingMap.class
+    , TestVersion.class
 } )
 
 public class TS_Lib
diff --git a/jena-base/src/test/java/org/apache/jena/atlas/lib/TestVersion.java b/jena-base/src/test/java/org/apache/jena/atlas/lib/TestVersion.java
new file mode 100644
index 0000000..a8e9b61
--- /dev/null
+++ b/jena-base/src/test/java/org/apache/jena/atlas/lib/TestVersion.java
@@ -0,0 +1,35 @@
+/*
+ * 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.jena.atlas.lib;
+
+import static org.junit.Assert.assertNotNull;
+import static org.junit.Assert.assertTrue;
+
+import java.util.Optional;
+
+import org.junit.Test;
+
+public class TestVersion {
+    @Test public void version_01() {
+        // This can not be a Jena class (jar probably does not exist during tests)
+        Optional<String> x = Version.versionForClass(org.slf4j.Logger.class);
+        assertNotNull("Optional<String> version info is null", x);
+        assertTrue("Version info is null", x.isPresent());
+    }
+}
diff --git a/jena-cmds/src/main/java/arq/cmdline/CmdARQ.java b/jena-cmds/src/main/java/arq/cmdline/CmdARQ.java
index 3ce0eca..fd6362c 100644
--- a/jena-cmds/src/main/java/arq/cmdline/CmdARQ.java
+++ b/jena-cmds/src/main/java/arq/cmdline/CmdARQ.java
@@ -18,7 +18,6 @@
 
 package arq.cmdline;
 
-import org.apache.jena.Jena;
 import org.apache.jena.atlas.lib.Lib;
 import org.apache.jena.cmd.ArgDecl;
 import org.apache.jena.cmd.CmdGeneral;
@@ -37,7 +36,6 @@
 
     protected CmdARQ(String[] argv) {
         super(argv);
-        modVersion.addClass(Jena.class);
         super.add(strictDecl, "--strict", "Operate in strict SPARQL mode (no extensions of any kind)");
         addModule(modContext);
     }
diff --git a/jena-cmds/src/main/java/arq/cmdline/ModLangOutput.java b/jena-cmds/src/main/java/arq/cmdline/ModLangOutput.java
index d9882ef..3a8661a 100644
--- a/jena-cmds/src/main/java/arq/cmdline/ModLangOutput.java
+++ b/jena-cmds/src/main/java/arq/cmdline/ModLangOutput.java
@@ -18,83 +18,96 @@
 
 package arq.cmdline;
 
-import java.io.PrintStream ;
-import java.util.HashSet ;
-import java.util.Set ;
+import java.io.PrintStream;
+import java.util.HashSet;
+import java.util.Set;
 
 import org.apache.jena.cmd.*;
 import org.apache.jena.ext.com.google.common.base.Objects;
-import org.apache.jena.riot.Lang ;
-import org.apache.jena.riot.RDFFormat ;
-import org.apache.jena.riot.RDFLanguages ;
-import org.apache.jena.riot.RDFWriterRegistry ;
-import org.apache.jena.riot.system.StreamRDFWriter ;
+import org.apache.jena.riot.Lang;
+import org.apache.jena.riot.RDFFormat;
+import org.apache.jena.riot.RDFLanguages;
+import org.apache.jena.riot.RDFWriterRegistry;
+import org.apache.jena.riot.system.StreamRDFWriter;
 
 public class ModLangOutput extends ModBase
 {
-    protected ArgDecl argOutput       = new ArgDecl(ArgDecl.HasValue, "out", "output") ;
-    protected ArgDecl argPretty       = new ArgDecl(ArgDecl.HasValue, "formatted", "pretty", "fmt") ;
-    protected ArgDecl argStream       = new ArgDecl(ArgDecl.HasValue, "stream") ;
-    protected ArgDecl argCompress     = new ArgDecl(ArgDecl.NoValue, "compress") ;
-    private boolean compressedOutput = false ;
-    private RDFFormat streamOutput    = null ;
-    private RDFFormat formattedOutput = null ;
+    protected ArgDecl argOutput       = new ArgDecl(ArgDecl.HasValue, "out", "output");
+    protected ArgDecl argPretty       = new ArgDecl(ArgDecl.HasValue, "formatted", "pretty", "fmt");
+    protected ArgDecl argStream       = new ArgDecl(ArgDecl.HasValue, "stream");
+    protected ArgDecl argCompress     = new ArgDecl(ArgDecl.NoValue, "compress");
+    private boolean compressedOutput  = false;
+    private RDFFormat streamOutput    = null;
+    private RDFFormat formattedOutput = null;
 
     @Override
     public void registerWith(CmdGeneral cmdLine) {
-        cmdLine.getUsage().startCategory("Output control") ;
-        cmdLine.add(argOutput,    "--output=FMT",     "Output in the given format, streaming if possible.") ;
-        cmdLine.add(argPretty,    "--formatted=FMT",  "Output, using pretty printing (consumes memory)") ;
-        cmdLine.add(argStream,    "--stream=FMT",     "Output, using a streaming format") ;
-        cmdLine.add(argCompress,  "--compress",       "Compress the output with gzip") ;
+        cmdLine.getUsage().startCategory("Output control");
+        cmdLine.add(argOutput,    "--output=FMT",     "Output in the given format, streaming if possible.");
+        cmdLine.add(argPretty,    "--formatted=FMT",  "Output, using pretty printing (consumes memory)");
+        cmdLine.add(argStream,    "--stream=FMT",     "Output, using a streaming format");
+        cmdLine.add(argCompress,  "--compress",       "Compress the output with gzip");
     }
 
     @Override
     public void processArgs(CmdArgModule cmdLine) {
+        {
+            int x = 0;
+            if ( cmdLine.contains(argPretty) )
+                x++;
+            if ( cmdLine.contains(argStream) )
+                x++;
+            if ( cmdLine.contains(argOutput) )
+                x++;
+
+            if ( x >= 2 )
+                throw new CmdException("Multiple output choices given: Use one of--stream, --output and --formatted");
+        }
+
         if ( cmdLine.contains(argPretty) ) {
-            String langName = cmdLine.getValue(argPretty) ;
-            Lang lang = RDFLanguages.nameToLang(langName) ;
+            String langName = cmdLine.getValue(argPretty);
+            Lang lang = RDFLanguages.nameToLang(langName);
             if ( lang == null )
-                throw new CmdException("Not recognized as an RDF language : '"+langName+"'") ;
-            formattedOutput = RDFWriterRegistry.defaultSerialization(lang) ;
+                throw new CmdException("Not recognized as an RDF language : '"+langName+"'");
+            formattedOutput = RDFWriterRegistry.defaultSerialization(lang);
             if ( formattedOutput == null ) {
-                System.err.println("Language '"+lang.getLabel()+"' not registered.") ;
-                printRegistered(System.err) ;
-                throw new CmdException("No output set: '"+langName+"'") ;
+                System.err.println("Language '"+lang.getLabel()+"' not registered.");
+                printRegistered(System.err);
+                throw new CmdException("No output set: '"+langName+"'");
             }
         }
 
         if ( cmdLine.contains(argStream) ) {
-            String langName = cmdLine.getValue(argStream) ;
-            Lang lang = RDFLanguages.nameToLang(langName) ;
+            String langName = cmdLine.getValue(argStream);
+            Lang lang = RDFLanguages.nameToLang(langName);
             if ( lang == null )
-                throw new CmdException("Not recognized as an RDF language : '"+langName+"'") ;
-            streamOutput = StreamRDFWriter.defaultSerialization(lang) ;
+                throw new CmdException("Not recognized as an RDF language : '"+langName+"'");
+            streamOutput = StreamRDFWriter.defaultSerialization(lang);
             if ( streamOutput == null ) {
-                System.err.println("Language '"+lang.getLabel()+"' not registered for streaming.") ;
-                printRegistered(System.err) ;
-                throw new CmdException("No output set: '"+langName+"'") ;
+                System.err.println("Language '"+lang.getLabel()+"' not registered for streaming.");
+                printRegistered(System.err);
+                throw new CmdException("No output set: '"+langName+"'");
             }
         }
 
         if ( cmdLine.contains(argOutput) ) {
-            String langName = cmdLine.getValue(argOutput) ;
-            Lang lang = RDFLanguages.nameToLang(langName) ;
+            String langName = cmdLine.getValue(argOutput);
+            Lang lang = RDFLanguages.nameToLang(langName);
             if ( lang == null )
-                throw new CmdException("Not recognized as an RDF language : '"+langName+"'") ;
+                throw new CmdException("Not recognized as an RDF language : '"+langName+"'");
 
             if ( StreamRDFWriter.registered(lang) ) {
-                streamOutput = StreamRDFWriter.defaultSerialization(lang) ;
+                streamOutput = StreamRDFWriter.defaultSerialization(lang);
             } else {
-                formattedOutput = RDFWriterRegistry.defaultSerialization(lang) ;
+                formattedOutput = RDFWriterRegistry.defaultSerialization(lang);
                 if ( formattedOutput == null ) {
-                    System.err.println("Language '"+lang.getLabel()+"' not recognized.") ;
-                    printRegistered(System.err) ;
-                    throw new CmdException("No output set: '"+langName+"'") ;
+                    System.err.println("Language '"+lang.getLabel()+"' not recognized.");
+                    printRegistered(System.err);
+                    throw new CmdException("No output set: '"+langName+"'");
                 }
                 // Non-streaming block-style writers.
                 // The normal RDF/XML writer is the pretty one, also know as "RDF/XML-ABBREV"
-                // but it can occassionally use a lot of stack and heap.
+                // but it can occasionally uses a lot of stack and heap.
                 //
                 // The RDF/XML basic writer ("Basic") is not streaming but does not
                 // consume a lot of stack and heap as it writes in a flat block style.
@@ -107,52 +120,51 @@
             }
         }
 
-        if ( cmdLine.contains(argCompress))
-            compressedOutput = true ;
+        compressedOutput = cmdLine.contains(argCompress);
 
         if ( streamOutput == null && formattedOutput == null )
-            streamOutput = RDFFormat.NQUADS ;
+            streamOutput = RDFFormat.NQUADS;
     }
 
-    private static Set<Lang>  hiddenLanguages = new HashSet<>() ;
+    private static Set<Lang>  hiddenLanguages = new HashSet<>();
     static {
-        hiddenLanguages.add(Lang.RDFNULL) ;
-        hiddenLanguages.add(Lang.CSV) ;
+        hiddenLanguages.add(Lang.RDFNULL);
+        hiddenLanguages.add(Lang.CSV);
     }
 
     private static void printRegistered(PrintStream out) {
-        out.println("Streaming languages:") ;
-        Set<Lang> seen = new HashSet<>() ;
+        out.println("Streaming languages:");
+        Set<Lang> seen = new HashSet<>();
         for ( RDFFormat fmt : StreamRDFWriter.registered()) {
-            Lang lang = fmt.getLang() ;
+            Lang lang = fmt.getLang();
             if ( hiddenLanguages.contains(lang))
-                continue ;
+                continue;
             if ( seen.contains(lang) )
-                continue ;
-            seen.add(lang) ;
-            out.println("   "+lang.getLabel()) ;
+                continue;
+            seen.add(lang);
+            out.println("   "+lang.getLabel());
         }
-        System.err.println("Non-streaming languages:") ;
+        System.err.println("Non-streaming languages:");
         for ( RDFFormat fmt : RDFWriterRegistry.registeredFormats() ) {
-            Lang lang = fmt.getLang() ;
+            Lang lang = fmt.getLang();
             if ( hiddenLanguages.contains(lang))
-                continue ;
+                continue;
             if ( seen.contains(lang) )
-                continue ;
-            seen.add(lang) ;
-            out.println("   "+lang.getLabel()) ;
+                continue;
+            seen.add(lang);
+            out.println("   "+lang.getLabel());
         }
     }
 
     public RDFFormat getOutputStreamFormat() {
-        return streamOutput ;
+        return streamOutput;
     }
 
     public RDFFormat getOutputFormatted() {
-        return formattedOutput ;
+        return formattedOutput;
     }
 
     public boolean compressedOutput() {
-        return compressedOutput ;
+        return compressedOutput;
     }
 }
diff --git a/jena-cmds/src/main/java/arq/cmdline/ModLangParse.java b/jena-cmds/src/main/java/arq/cmdline/ModLangParse.java
index c375591..84bd526 100644
--- a/jena-cmds/src/main/java/arq/cmdline/ModLangParse.java
+++ b/jena-cmds/src/main/java/arq/cmdline/ModLangParse.java
@@ -47,6 +47,7 @@
     private ArgDecl argRDFS     = new ArgDecl(ArgDecl.HasValue, "rdfs");
 
     private ArgDecl argSyntax   = new ArgDecl(ArgDecl.HasValue, "syntax");
+    private ArgDecl argMerge    = new ArgDecl(ArgDecl.NoValue, "merge", "union");
 
     private String rdfsVocabFilename    = null;
     private Model  rdfsVocab            = null;
@@ -64,6 +65,8 @@
     private boolean strict              = false;
     private boolean validate            = false;
     private boolean outputCount         = false;
+    private boolean quadsToTriples    = false;
+
     private Lang lang                   = null;
 
     @Override
@@ -77,6 +80,7 @@
         cmdLine.add(argStrict,  "--strict",         "Run with in strict mode");
         cmdLine.add(argValidate,"--validate",       "Same as --sink --check --strict");
         cmdLine.add(argCount,   "--count",          "Count triples/quads parsed, not output them");
+        cmdLine.add(argMerge,   "--merge",          "Convert quads to triples");
         cmdLine.add(argRDFS,    "--rdfs=file",      "Apply some RDFS inference using the vocabulary in the file");
         cmdLine.add(argNoCheck, "--nocheck",        "Turn off checking of RDF terms");
 
@@ -139,6 +143,8 @@
             outputCount = true;
         }
 
+        quadsToTriples = cmdLine.contains(argMerge);
+
         if ( cmdLine.contains(argRDFS) ) {
             try {
                 rdfsVocabFilename = cmdLine.getArg(argRDFS).getValue();
@@ -171,6 +177,10 @@
         return outputCount;
     }
 
+    public boolean mergeQuads() {
+        return quadsToTriples;
+    }
+
     public boolean stopOnBadTerm() {
         return stopOnError;
     }
diff --git a/jena-cmds/src/main/java/arq/load.java b/jena-cmds/src/main/java/arq/load.java
deleted file mode 100644
index 1279ecf..0000000
--- a/jena-cmds/src/main/java/arq/load.java
+++ /dev/null
@@ -1,116 +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 arq;
-
-import java.util.Iterator;
-import java.util.List;
-
-import arq.cmdline.CmdUpdate;
-import org.apache.jena.atlas.io.IndentedWriter;
-import org.apache.jena.atlas.lib.Lib;
-import org.apache.jena.cmd.ArgDecl;
-import org.apache.jena.cmd.CmdException;
-import org.apache.jena.graph.Graph;
-import org.apache.jena.graph.Node;
-import org.apache.jena.sparql.core.DatasetGraph;
-import org.apache.jena.sparql.exec.UpdateExec;
-import org.apache.jena.sparql.modify.request.UpdateLoad;
-import org.apache.jena.sparql.sse.SSE;
-import org.apache.jena.sparql.util.graph.GraphLoadMonitor;
-import org.apache.jena.update.UpdateRequest;
-
-public class load extends CmdUpdate {
-    static private final ArgDecl graphNameArg = new ArgDecl(ArgDecl.HasValue, "--graph");
-    static private final ArgDecl dumpArg = new ArgDecl(ArgDecl.NoValue, "--dump");
-
-    String graphName = null;
-    List<String> loadFiles = null;
-    boolean dump = false;
-
-    public static void main(String...argv) {
-        new load(argv).mainRun();
-    }
-
-    protected load(String[] argv) {
-        super(argv);
-        super.add(graphNameArg, "--graph=IRI", "Graph IRI (loads default graph if absent)");
-        super.add(dumpArg, "--dump", "Dump the resulting graph store");
-    }
-
-    @Override
-    protected void processModulesAndArgs() {
-        if ( containsMultiple(graphNameArg) )
-            throw new CmdException("At most one --graph allowed");
-
-        graphName = getValue(graphNameArg);
-        loadFiles = super.getPositional();
-        dump = contains(dumpArg);
-        super.processModulesAndArgs();
-    }
-
-    @Override
-    protected String getCommandName() {
-        return Lib.className(this);
-    }
-
-    @Override
-    protected String getSummary() {
-        return getCommandName() + " --desc=assembler [--dump] --update=<request file>";
-    }
-
-    @Override
-    protected void execUpdate(DatasetGraph dataset) {
-        if ( loadFiles.size() == 0 )
-            throw new CmdException("Nothing to do");
-
-        UpdateRequest req = new UpdateRequest();
-        for ( String filename : loadFiles ) {
-            UpdateLoad loadReq = new UpdateLoad(filename, graphName);
-            req.add(loadReq);
-        }
-
-        if ( true ) {
-            // Need a better way
-            monitor(dataset.getDefaultGraph());
-            for ( Iterator<Node> iter = dataset.listGraphNodes() ; iter.hasNext() ; ) {
-                Graph g = dataset.getGraph(iter.next());
-                monitor(g);
-            }
-        }
-
-        UpdateExec.newBuilder().update(req).dataset(dataset).execute();
-
-        if ( dump ) {
-            IndentedWriter out = IndentedWriter.stdout;
-            SSE.write(dataset);
-            out.flush();
-        }
-    }
-
-    private void monitor(Graph graph) {
-        GraphLoadMonitor m = new GraphLoadMonitor(20000, false);
-        // m.setSummaryLabel(getCommandName()) ;
-        graph.getEventManager().register(m);
-    }
-
-    @Override
-    protected DatasetGraph dealWithNoDataset() {
-        throw new CmdException("No dataset provided");
-    }
-}
diff --git a/jena-cmds/src/main/java/arq/query.java b/jena-cmds/src/main/java/arq/query.java
index b34bdc5..c827fcd 100644
--- a/jena-cmds/src/main/java/arq/query.java
+++ b/jena-cmds/src/main/java/arq/query.java
@@ -22,6 +22,7 @@
 
 import arq.cmdline.* ;
 import org.apache.commons.io.output.NullPrintStream;
+import org.apache.jena.Jena;
 import org.apache.jena.atlas.io.IO;
 import org.apache.jena.atlas.io.IndentedWriter ;
 import org.apache.jena.atlas.lib.Lib ;
@@ -70,6 +71,7 @@
         super(argv) ;
         modQuery = new ModQueryIn(getDefaultSyntax()) ;
         modDataset = setModDataset() ;
+        modVersion.addClass(null, Jena.class);
 
         super.addModule(modQuery) ;
         super.addModule(modResults) ;
@@ -150,7 +152,7 @@
 
         // Warm up.
         for ( int i = 0 ; i < warmupCount ; i++ )
-            // Include the results format so that is warmed up as well. 
+            // Include the results format so that is warmed up as well.
             queryExec(false, modResults.getResultsFormat(), NullPrintStream.NULL_PRINT_STREAM) ;
 
         for ( int i = 0 ; i < repeatCount ; i++ )
diff --git a/jena-cmds/src/main/java/org/apache/jena/cmd/ModVersion.java b/jena-cmds/src/main/java/org/apache/jena/cmd/ModVersion.java
index 725ce8c..e7127ce 100644
--- a/jena-cmds/src/main/java/org/apache/jena/cmd/ModVersion.java
+++ b/jena-cmds/src/main/java/org/apache/jena/cmd/ModVersion.java
@@ -18,21 +18,43 @@
 
 package org.apache.jena.cmd;
 
-import org.apache.jena.atlas.io.IndentedWriter;
+import java.util.ArrayList;
+import java.util.List;
+import java.util.Optional;
+
+import org.apache.jena.Jena;
+import org.apache.jena.atlas.lib.Pair;
 import org.apache.jena.atlas.lib.Version;
+
+/**
+ * Version information.
+ * <p>
+ * The version is the manifest entry in the jar file for a
+ * class. It is not available if the class comes from a development tree where the
+ * class file is from "target" (maven).
+ */
 public class ModVersion extends ModBase
 {
     protected final ArgDecl versionDecl = new ArgDecl(ArgDecl.NoValue, "version");
     protected boolean version = false;
     protected boolean printAndExit = false;
-    private Version versionMgr = new Version();
+
+    // (system name, version string)
+    private List<Pair<String, Optional<String>>> descriptions = new ArrayList<>();
 
     public ModVersion(boolean printAndExit) {
         this.printAndExit = printAndExit;
     }
 
+    /** Add a class for the version number */
     public void addClass(Class<? > c) {
-        versionMgr.addClass(c);
+        addClass(c.getSimpleName(), c);
+    }
+
+    /** Add a label and a class for the version number */
+    public void addClass(String name, Class<? > cls) {
+        Pair<String, Optional<String>> desc = Pair.create(name, Version.versionForClass(cls));
+        descriptions.add(desc);
     }
 
     @Override
@@ -54,7 +76,11 @@
     }
 
     public void printVersion() {
-        versionMgr.print(IndentedWriter.stdout);
+        if ( descriptions.isEmpty() ) {
+            Version.printVersion(System.out, null, Version.versionForClass(Jena.class));
+            return;
+        }
+        descriptions.forEach(p->Version.printVersion(System.out, p.getLeft(), p.getRight()));
     }
 
     public void printVersionAndExit() {
diff --git a/jena-cmds/src/main/java/riotcmd/CmdLangParse.java b/jena-cmds/src/main/java/riotcmd/CmdLangParse.java
index d3ead84..3e36b05 100644
--- a/jena-cmds/src/main/java/riotcmd/CmdLangParse.java
+++ b/jena-cmds/src/main/java/riotcmd/CmdLangParse.java
@@ -29,10 +29,10 @@
 import arq.cmdline.ModLangOutput;
 import arq.cmdline.ModLangParse;
 import arq.cmdline.ModTime;
-import org.apache.jena.Jena;
 import org.apache.jena.atlas.io.IO;
 import org.apache.jena.atlas.lib.IRILib;
 import org.apache.jena.atlas.lib.Pair;
+import org.apache.jena.atlas.logging.Log;
 import org.apache.jena.cmd.ArgDecl;
 import org.apache.jena.cmd.CmdException;
 import org.apache.jena.cmd.CmdGeneral;
@@ -44,14 +44,12 @@
 import org.apache.jena.riot.*;
 import org.apache.jena.riot.lang.LabelToNode;
 import org.apache.jena.riot.lang.StreamRDFCounting;
-import org.apache.jena.riot.system.ErrorHandlerFactory;
-import org.apache.jena.riot.system.StreamRDF;
-import org.apache.jena.riot.system.StreamRDFLib;
-import org.apache.jena.riot.system.StreamRDFWriter;
+import org.apache.jena.riot.system.*;
 import org.apache.jena.riot.tokens.Tokenizer;
 import org.apache.jena.riot.tokens.TokenizerText;
 import org.apache.jena.sparql.core.DatasetGraph;
 import org.apache.jena.sparql.core.DatasetGraphFactory;
+import org.apache.jena.sparql.core.Quad;
 import org.apache.jena.sys.JenaSystem;
 
 /** Common framework for running RIOT parsers */
@@ -64,9 +62,10 @@
     protected ModLangOutput modLangOutput = new ModLangOutput();
     protected SetupRDFS setup = null;
     protected ModContext modContext = new ModContext();
-    protected ArgDecl strictDecl = new ArgDecl(ArgDecl.NoValue, "strict");
+    protected ArgDecl argStrict = new ArgDecl(ArgDecl.NoValue, "strict");
 
     protected boolean cmdStrictMode = false;
+    // Merge quads to triples.
 
     protected CmdLangParse(String[] argv) {
         super(argv);
@@ -74,9 +73,7 @@
         addModule(modTime);
         addModule(modLangOutput);
         addModule(modLangParse);
-
-        super.modVersion.addClass(Jena.class);
-        // super.modVersion.addClass(RIOT.class) ;
+        super.modVersion.addClass(RIOT.class);
     }
 
     @Override
@@ -87,21 +84,50 @@
     protected List<ParseRecord> outcomes = new ArrayList<>();
 
     protected OutputStream outputWrite = System.out;
-    protected StreamRDF outputStream = null;
+    protected StreamRDF parserOutputStream = null;
     protected String parserBaseIRI = null;
     protected boolean passRelativeURIs = false;
     protected String writerBaseIRI = null;
-
     @Override
     protected void processModulesAndArgs() {
-        cmdStrictMode = super.contains(strictDecl);
+        cmdStrictMode = super.contains(argStrict);
+
+        // checking.
+
+        // True if any input is quads
+        // False is unknow (stdin, no --syntax)
+        // Check will also be done during parsing.
+        boolean someQuadsInput = false;
+
+        if ( ! getPositional().isEmpty() || modLangParse.getLang() != null ) {
+            // otherwise the input is stdin and maybe triples or quads.
+            if ( modLangParse.getLang() != null ) {
+                someQuadsInput = RDFLanguages.isQuads(modLangParse.getLang());
+            } else {
+                for ( String fn :  super.getPositional() ) {
+                    Lang lang = RDFLanguages.filenameToLang(fn);
+                    if ( !RDFLanguages.isQuads(lang) ) {
+                        someQuadsInput = false;
+                        break;
+                    }
+                }
+            }
+        }
+        RDFFormat output = modLangOutput.getOutputStreamFormat();
+        if ( output == null )
+            output =  modLangOutput.getOutputFormatted();
+        if ( output == null )
+            output = RDFFormat.NQUADS;
+
+        if ( someQuadsInput && ! isQuadsOutput() )
+            Log.warn(SysRIOT.getLogger(), "Quads syntax in the input files but triple output requested.");
     }
 
     protected interface PostParseHandler {
         void postParse();
     }
 
-    static class ParseRecord {
+    protected static class ParseRecord {
         final String filename;
         final boolean success;
         final long timeMillis;
@@ -121,6 +147,19 @@
         }
     }
 
+    /** Quads to triples. */
+    protected static class QuadsToTriples extends StreamRDFWrapper {
+
+        public QuadsToTriples(StreamRDF destination) {
+            super(destination);
+        }
+
+        @Override
+        public void quad(Quad quad) {
+            super.triple(quad.asTriple());
+        }
+    }
+
     @Override
     protected void exec() {
         boolean oldStrictValue = SysRIOT.isStrictMode();
@@ -152,16 +191,36 @@
             }
         }
 
-        outputStream = null;
+        parserOutputStream = null;
         PostParseHandler postParse = null;
 
-        outputStream = createStreamSink();
-        if ( outputStream == null ) {
+        parserOutputStream = createStreamSink();
+        if ( parserOutputStream == null ) {
             Pair<StreamRDF, PostParseHandler> p = createAccumulateSink();
-            outputStream = p.getLeft();
+            parserOutputStream = p.getLeft();
             postParse = p.getRight();
         }
 
+        if ( ! modLangParse.mergeQuads() && ! isQuadsOutput() ) {
+            // Only pass through triples.
+            final StreamRDF dest = parserOutputStream;
+            if ( isStreamingOutput() ) {
+                Runnable action = () -> {
+                    // dest may be significantly buffered over the top of the output stream.
+                    // The log message does not necessarily come out in the right place - it may be early.
+                    IO.flush(outputWrite);
+                    Log.warn(SysRIOT.getLogger(), "Quads in triples output - quads ignored.");
+                };
+                parserOutputStream = StreamTriplesOnly.actionIfQuads(parserOutputStream, action);
+            } else {
+                // Not streaming - code can issue error before formatting.
+            }
+        }
+
+        // If QuadsToTriples is added here, then counts will be "triples only"
+        if (false && modLangParse.mergeQuads() )
+            parserOutputStream = new QuadsToTriples(parserOutputStream);
+
         try {
             // The actual parsing ...
             if ( super.getPositional().isEmpty() ) {
@@ -304,10 +363,6 @@
         builder.errorHandler(errHandler);
 
         // Make into a cmd flag. (input and output subflags?)
-        // If input is "label, then output using NodeToLabel.createBNodeByLabelRaw()
-        // ;
-        // else use NodeToLabel.createBNodeByLabel() ;
-        // Also, as URI.
         final boolean labelsAsGiven = false;
 // NodeToLabel labels = SyntaxLabels.createNodeToLabel() ;
 // if ( labelsAsGiven )
@@ -315,10 +370,14 @@
         if ( labelsAsGiven )
             builder.labelToNode(LabelToNode.createUseLabelAsGiven());
 
-        StreamRDF s = outputStream;
+        // Build parser output additions.
+        StreamRDF s = parserOutputStream;
         if ( setup != null )
             s = RDFSFactory.streamRDFS(s, setup);
-        StreamRDFCounting sink = StreamRDFLib.count(s);
+        // If added here, count is quads and triples seen in the input.
+        if ( modLangParse.mergeQuads() )
+            s = new QuadsToTriples(s);
+        StreamRDFCounting parserOut = StreamRDFLib.count(s);
         s = null;
 
         boolean successful = true;
@@ -326,8 +385,8 @@
         modTime.startTimer();
         RDFParser parser = builder.build();
         try {
-            sink.start();
-            parser.parse(sink);
+            parserOut.start();
+            parser.parse(parserOut);
             successful = true;
         } catch (RiotNotFoundException ex) {
             errHandler.error(ex.getMessage(), -1, -1);
@@ -337,9 +396,9 @@
         } catch (IRIException ex) {
             successful = false;
         }
-        sink.finish();
+        parserOut.finish();
         long x = modTime.endTimer();
-        ParseRecord outcome = new ParseRecord(filename, successful, x, sink.countTriples(), sink.countQuads(), errHandler);
+        ParseRecord outcome = new ParseRecord(filename, successful, x, parserOut.countTriples(), parserOut.countQuads(), errHandler);
         return outcome;
     }
 
@@ -351,7 +410,6 @@
         RDFFormat fmt = modLangOutput.getOutputStreamFormat();
         if ( fmt == null )
             return null;
-        /** Create an accumulating output stream for later pretty printing */
         return StreamRDFWriter.getWriterStream(outputWrite, fmt, RIOT.getContext());
     }
 
@@ -365,8 +423,15 @@
             builder.format(fmt);
             if ( RDFLanguages.isQuads(fmt.getLang()) )
                 builder.source(dsg);
-            else
+            else {
+                // Should only see triples - this is a consistency check.
+                if ( dsg.size() > 0 ) {
+                    Log.error(SysRIOT.getLogger(), "Quads seen in input but output is triples only.");
+                    throw new CmdException();
+                }
                 builder.source(dsg.getDefaultGraph());
+            }
+
             String baseURI = writerBaseIRI;
             if ( baseURI != null )
                 builder.base(baseURI);
@@ -375,6 +440,23 @@
         return Pair.create(sink, handler);
     }
 
+    protected boolean isQuadsOutput() {
+        // Use stream in preference - CmdLangParse
+        RDFFormat fmt = modLangOutput.getOutputStreamFormat();
+        if ( fmt == null)
+            fmt = modLangOutput.getOutputFormatted();
+        // RDFLanguages.isTriples means the language can be used in a triples context
+        // hence the test is "not quads".
+        if ( fmt != null && ! RDFLanguages.isQuads(fmt.getLang()) )
+            return false;
+        else
+            return true;
+    }
+
+    protected boolean isStreamingOutput() {
+        return modLangOutput.getOutputStreamFormat() != null;
+    }
+
     protected Tokenizer makeTokenizer(InputStream in) {
         Tokenizer tokenizer = TokenizerText.create().source(in).build();
         return tokenizer;
diff --git a/jena-cmds/src/main/java/shacl/shacl.java b/jena-cmds/src/main/java/shacl/shacl.java
index 37c4c76..d81f179 100644
--- a/jena-cmds/src/main/java/shacl/shacl.java
+++ b/jena-cmds/src/main/java/shacl/shacl.java
@@ -19,9 +19,8 @@
 package shacl;
 
 import java.util.Arrays;
+import java.util.Optional;
 
-import org.apache.jena.Jena;
-import org.apache.jena.atlas.io.IndentedWriter;
 import org.apache.jena.atlas.lib.Version;
 import org.apache.jena.atlas.logging.LogCtl;
 import org.apache.jena.sys.JenaSystem;
@@ -32,13 +31,6 @@
         JenaSystem.init();
     }
 
-    private static void version() {
-        Version version = new Version();
-        version.addClass(Jena.class) ;
-        version.print(IndentedWriter.stdout);
-        System.exit(0) ;
-    }
-    
     public static void main(String...args) {
         if ( args.length == 0 ) {
             System.err.println("Usage: shacl SUB ARGS...");
@@ -60,9 +52,11 @@
                 return;
             case "version":
             case "--version":
-            case "-version":
-                version();
+            case "-version": {
+                Optional<String> ver = Version.versionForClass(shacl.class);
+                Version.printVersion(System.err, "SHACL",  ver);
                 System.exit(0);
+            }
         }
 
         // Map to full name.
diff --git a/jena-cmds/src/main/java/shex/shex.java b/jena-cmds/src/main/java/shex/shex.java
index f449ba4..5fa8284 100644
--- a/jena-cmds/src/main/java/shex/shex.java
+++ b/jena-cmds/src/main/java/shex/shex.java
@@ -19,9 +19,8 @@
 package shex;
 
 import java.util.Arrays;
+import java.util.Optional;
 
-import org.apache.jena.Jena;
-import org.apache.jena.atlas.io.IndentedWriter;
 import org.apache.jena.atlas.lib.Version;
 import org.apache.jena.atlas.logging.LogCtl;
 import org.apache.jena.sys.JenaSystem;
@@ -32,13 +31,6 @@
         JenaSystem.init();
     }
 
-    private static void version() {
-        Version version = new Version();
-        version.addClass(Jena.class) ;
-        version.print(IndentedWriter.stdout);
-        System.exit(0) ;
-    }
-
     public static void main(String...args) {
         if ( args.length == 0 ) {
             System.err.println("Usage: shex SUB ARGS...");
@@ -59,9 +51,11 @@
                 return;
             case "version":
             case "--version":
-            case "-version":
-                version();
+            case "-version": {
+                Optional<String> ver = Version.versionForClass(shex.class);
+                Version.printVersion(System.err, "ShEx",  ver);
                 System.exit(0);
+            }
         }
 
         // Map to full name.
diff --git a/jena-cmds/src/main/java/tdb/cmdline/CmdTDB.java b/jena-cmds/src/main/java/tdb/cmdline/CmdTDB.java
index 59c59b4..bb67f65 100644
--- a/jena-cmds/src/main/java/tdb/cmdline/CmdTDB.java
+++ b/jena-cmds/src/main/java/tdb/cmdline/CmdTDB.java
@@ -19,9 +19,7 @@
 package tdb.cmdline;
 
 import arq.cmdline.CmdARQ;
-import org.apache.jena.Jena;
 import org.apache.jena.atlas.lib.Lib;
-import org.apache.jena.query.ARQ;
 import org.apache.jena.query.Dataset;
 import org.apache.jena.sparql.core.DatasetGraph;
 import org.apache.jena.sys.JenaSystem;
@@ -40,9 +38,7 @@
         super(argv);
         init();
         super.addModule(tdbDatasetAssembler);
-        super.modVersion.addClass(Jena.class);
-        super.modVersion.addClass(ARQ.class);
-        super.modVersion.addClass(TDB.class);
+        super.modVersion.addClass("TDB1", TDB.class);
     }
 
     public static synchronized void init() {
diff --git a/jena-cmds/src/main/java/tdb/tdbconfig.java b/jena-cmds/src/main/java/tdb/tdbconfig.java
index 41f07dd..38f1e7e 100644
--- a/jena-cmds/src/main/java/tdb/tdbconfig.java
+++ b/jena-cmds/src/main/java/tdb/tdbconfig.java
@@ -216,7 +216,7 @@
         protected void exec() {
             System.out.println("-- " + DateTimeUtils.nowAsString() + " --");
             ModVersion v = new ModVersion(true);
-            v.addClass(TDB.class);
+            v.addClass("TDB1", TDB.class);
             v.printVersionAndExit();
         }
 
diff --git a/jena-cmds/src/main/java/tdb2/cmdline/CmdTDB.java b/jena-cmds/src/main/java/tdb2/cmdline/CmdTDB.java
index a69423d..3ae546e 100644
--- a/jena-cmds/src/main/java/tdb2/cmdline/CmdTDB.java
+++ b/jena-cmds/src/main/java/tdb2/cmdline/CmdTDB.java
@@ -19,11 +19,9 @@
 package tdb2.cmdline;
 
 import arq.cmdline.CmdARQ ;
-import org.apache.jena.Jena ;
 import org.apache.jena.atlas.lib.Lib ;
 import org.apache.jena.atlas.logging.LogCtl ;
 import org.apache.jena.dboe.base.file.Location;
-import org.apache.jena.query.ARQ ;
 import org.apache.jena.query.Dataset ;
 import org.apache.jena.sparql.core.DatasetGraph ;
 import org.apache.jena.sys.JenaSystem ;
@@ -41,8 +39,6 @@
         super(argv) ;
         init() ;
         super.addModule(tdbDatasetAssembler) ;
-        super.modVersion.addClass(Jena.class) ;
-        super.modVersion.addClass(ARQ.class) ;
         super.modVersion.addClass(TDB2.class) ;
     }
 
diff --git a/jena-cmds/src/test/java/arq/rdftests.java b/jena-cmds/src/test/java/arq/rdftests.java
index faad7ff..748da7a 100644
--- a/jena-cmds/src/test/java/arq/rdftests.java
+++ b/jena-cmds/src/test/java/arq/rdftests.java
@@ -24,6 +24,7 @@
 import java.util.function.Function;
 
 import arq.cmdline.ModContext;
+import org.apache.jena.Jena;
 import org.apache.jena.arq.junit.SurpressedTest;
 import org.apache.jena.arq.junit.TextTestRunner;
 import org.apache.jena.arq.junit.manifest.ManifestEntry;
@@ -108,7 +109,7 @@
     protected rdftests(String[] argv) {
         super(argv);
 //        super.add(baseDecl, "--base=URI", "Set the base URI");
-        super.modVersion.addClass(ARQ.class);
+        super.modVersion.addClass(Jena.class);
         getUsage().startCategory("Tests (execute test manifest)");
         getUsage().addUsage("<manifest>", "run the tests specified in the given manifest");
         add(arqDecl, "--arq",       "Operate with ARQ syntax");
diff --git a/jena-core/pom.xml b/jena-core/pom.xml
index 8308f58..37b7adf 100644
--- a/jena-core/pom.xml
+++ b/jena-core/pom.xml
@@ -127,14 +127,6 @@
         <directory>src/main/resources</directory>
       </resource>
 
-      <resource>
-        <directory>src/main/resources</directory>
-        <includes>
-          <include>org/apache/jena/jena-properties.xml</include>
-        </includes>
-        <filtering>true</filtering>
-      </resource>
-
     </resources>
 
     <plugins>
diff --git a/jena-core/src/main/resources/org/apache/jena/jena-properties.xml b/jena-core/src/main/resources/org/apache/jena/jena-properties.xml
deleted file mode 100644
index a231611..0000000
--- a/jena-core/src/main/resources/org/apache/jena/jena-properties.xml
+++ /dev/null
@@ -1,11 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!DOCTYPE properties SYSTEM "http://java.sun.com/dtd/properties.dtd">
-
-<!-- Licensed under the terms of http://www.apache.org/licenses/LICENSE-2.0 -->
-<properties version="1.0">
-  <comment>Jena System Properties</comment>
-  <entry key="org.apache.jena.name">${project.name}</entry>
-  <entry key="org.apache.jena.website">${project.url}</entry>
-  <entry key="org.apache.jena.version">${project.version}</entry>
-  <entry key="org.apache.jena.build.datetime">${build.time.xsd}</entry>
-</properties>
diff --git a/jena-core/src/test/java/org/apache/jena/ttl_test/turtle/parser/JavaCharStream.java b/jena-core/src/test/java/org/apache/jena/ttl_test/turtle/parser/JavaCharStream.java
index 3c1893e..589c6a7 100644
--- a/jena-core/src/test/java/org/apache/jena/ttl_test/turtle/parser/JavaCharStream.java
+++ b/jena-core/src/test/java/org/apache/jena/ttl_test/turtle/parser/JavaCharStream.java
@@ -31,7 +31,7 @@
 class JavaCharStream
 {
   /** Whether parser is static. */
-
+  
 @SuppressWarnings("all")
 public static final boolean staticFlag = false;
 
@@ -83,7 +83,7 @@
   }
 
 /* Position in buffer. */
-
+  
 @SuppressWarnings("all")
 public int bufpos = -1;
   int bufsize;
@@ -108,10 +108,10 @@
   protected int tabSize = 1;
   protected boolean trackLineColumn = true;
 
-
+  
 @SuppressWarnings("all")
 public void setTabSize(int i) { tabSize = i; }
-
+  
 @SuppressWarnings("all")
 public int getTabSize() { return tabSize; }
 
@@ -203,7 +203,7 @@
   }
 
 /* @return starting character for token. */
-
+  
 @SuppressWarnings("all")
 public char BeginToken() throws java.io.IOException
   {
@@ -285,7 +285,7 @@
   }
 
 /* Read a character. */
-
+  
 @SuppressWarnings("all")
 public char readChar() throws java.io.IOException
   {
@@ -385,7 +385,7 @@
    * @see #getEndColumn
    */
   @Deprecated
-
+  
 @SuppressWarnings("all")
 public int getColumn() {
     return bufcolumn[bufpos];
@@ -397,7 +397,7 @@
    * @return the line number.
    */
   @Deprecated
-
+  
 @SuppressWarnings("all")
 public int getLine() {
     return bufline[bufpos];
@@ -406,7 +406,7 @@
 /** Get end column.
  * @return the end column or -1
  */
-
+  
 @SuppressWarnings("all")
 public int getEndColumn() {
     return bufcolumn[bufpos];
@@ -415,7 +415,7 @@
 /** Get end line.
  * @return the end line number or -1
  */
-
+  
 @SuppressWarnings("all")
 public int getEndLine() {
     return bufline[bufpos];
@@ -423,21 +423,21 @@
 
 /** Get the beginning column.
  * @return column of token start */
-
+  
 @SuppressWarnings("all")
 public int getBeginColumn() {
     return bufcolumn[tokenBegin];
   }
 
 /** @return line number of token start */
-
+  
 @SuppressWarnings("all")
 public int getBeginLine() {
     return bufline[tokenBegin];
   }
 
 /** Retreat. */
-
+  
 @SuppressWarnings("all")
 public void backup(int amount) {
 
@@ -452,7 +452,7 @@
  * @param startcolumn column number of the first character of the stream.
  * @param buffersize size of the buffer
  */
-
+  
 @SuppressWarnings("all")
 public JavaCharStream(java.io.Reader dstream,
                  int startline, int startcolumn, int buffersize)
@@ -473,7 +473,7 @@
  * @param startline line number of the first character of the stream, mostly for error messages.
  * @param startcolumn column number of the first character of the stream.
  */
-
+  
 @SuppressWarnings("all")
 public JavaCharStream(java.io.Reader dstream,
                                         int startline, int startcolumn)
@@ -483,15 +483,16 @@
 
 /** Constructor.
  * @param dstream the underlying data source.
+ * @param startline line number of the first character of the stream, mostly for error messages.
  */
-
+  
 @SuppressWarnings("all")
 public JavaCharStream(java.io.Reader dstream)
   {
     this(dstream, 1, 1, 4096);
   }
 /* Reinitialise. */
-
+  
 @SuppressWarnings("all")
 public void ReInit(java.io.Reader dstream,
                  int startline, int startcolumn, int buffersize)
@@ -514,7 +515,7 @@
   }
 
 /* Reinitialise. */
-
+  
 @SuppressWarnings("all")
 public void ReInit(java.io.Reader dstream,
                                         int startline, int startcolumn)
@@ -523,14 +524,14 @@
   }
 
 /* Reinitialise. */
-
+  
 @SuppressWarnings("all")
 public void ReInit(java.io.Reader dstream)
   {
     ReInit(dstream, 1, 1, 4096);
   }
 /** Constructor. */
-
+  
 @SuppressWarnings("all")
 public JavaCharStream(java.io.InputStream dstream, String encoding, int startline,
   int startcolumn, int buffersize) throws java.io.UnsupportedEncodingException
@@ -544,7 +545,7 @@
  * @param startcolumn column number of the first character of the stream.
  * @param buffersize size of the buffer
  */
-
+  
 @SuppressWarnings("all")
 public JavaCharStream(java.io.InputStream dstream, int startline,
   int startcolumn, int buffersize)
@@ -559,7 +560,7 @@
  * @param startcolumn column number of the first character of the stream.
  * @throws UnsupportedEncodingException encoding is invalid or unsupported.
  */
-
+  
 @SuppressWarnings("all")
 public JavaCharStream(java.io.InputStream dstream, String encoding, int startline,
                         int startcolumn) throws java.io.UnsupportedEncodingException
@@ -572,7 +573,7 @@
  * @param startline line number of the first character of the stream, mostly for error messages.
  * @param startcolumn column number of the first character of the stream.
  */
-
+  
 @SuppressWarnings("all")
 public JavaCharStream(java.io.InputStream dstream, int startline,
                         int startcolumn)
@@ -585,7 +586,7 @@
  * @param encoding the character encoding of the data stream.
  * @throws UnsupportedEncodingException encoding is invalid or unsupported.
  */
-
+  
 @SuppressWarnings("all")
 public JavaCharStream(java.io.InputStream dstream, String encoding) throws java.io.UnsupportedEncodingException
   {
@@ -595,7 +596,7 @@
   /** Constructor.
    * @param dstream the underlying data source.
    */
-
+  
 @SuppressWarnings("all")
 public JavaCharStream(java.io.InputStream dstream)
   {
@@ -609,7 +610,7 @@
  * @param startcolumn column number of the first character of the stream.
  * @param buffersize size of the buffer
  */
-
+  
 @SuppressWarnings("all")
 public void ReInit(java.io.InputStream dstream, String encoding, int startline,
   int startcolumn, int buffersize) throws java.io.UnsupportedEncodingException
@@ -623,7 +624,7 @@
  * @param startcolumn column number of the first character of the stream.
  * @param buffersize size of the buffer
  */
-
+  
 @SuppressWarnings("all")
 public void ReInit(java.io.InputStream dstream, int startline,
   int startcolumn, int buffersize)
@@ -637,7 +638,7 @@
  * @param startcolumn column number of the first character of the stream.
  * @throws UnsupportedEncodingException encoding is invalid or unsupported.
  */
-
+  
 @SuppressWarnings("all")
 public void ReInit(java.io.InputStream dstream, String encoding, int startline,
                      int startcolumn) throws java.io.UnsupportedEncodingException
@@ -649,7 +650,7 @@
  * @param startline line number of the first character of the stream, mostly for error messages.
  * @param startcolumn column number of the first character of the stream.
  */
-
+  
 @SuppressWarnings("all")
 public void ReInit(java.io.InputStream dstream, int startline,
                      int startcolumn)
@@ -661,7 +662,7 @@
  * @param encoding the character encoding of the data stream.
  * @throws UnsupportedEncodingException encoding is invalid or unsupported.
  */
-
+  
 @SuppressWarnings("all")
 public void ReInit(java.io.InputStream dstream, String encoding) throws java.io.UnsupportedEncodingException
   {
@@ -671,7 +672,7 @@
 /** Reinitialise.
  * @param dstream the underlying data source.
  */
-
+  
 @SuppressWarnings("all")
 public void ReInit(java.io.InputStream dstream)
   {
@@ -680,7 +681,7 @@
 
   /** Get the token timage.
    * @return token image as String */
-
+  
 @SuppressWarnings("all")
 public String GetImage()
   {
@@ -694,7 +695,7 @@
   /** Get the suffix as an array of characters.
    * @param len the length of the array to return.
    * @return suffix */
-
+  
 @SuppressWarnings("all")
 public char[] GetSuffix(int len)
   {
@@ -713,7 +714,7 @@
   }
 
   /** Set buffers back to null when finished. */
-
+  
 @SuppressWarnings("all")
 public void Done()
   {
@@ -729,7 +730,7 @@
    * @param newLine the new line number.
    * @param newCol the new column number.
    */
-
+  
 @SuppressWarnings("all")
 public void adjustBeginLineColumn(int newLine, int newCol)
   {
@@ -778,4 +779,4 @@
   void setTrackLineColumn(boolean tlc) { trackLineColumn = tlc; }
 
 }
-/* JavaCC - OriginalChecksum=932c0f047fc42f112a9b58627aff6634 (do not edit this line) */
+/* JavaCC - OriginalChecksum=9de559d5082595b79322998d8e7a955b (do not edit this line) */
diff --git a/jena-core/src/test/java/org/apache/jena/ttl_test/turtle/parser/ParseException.java b/jena-core/src/test/java/org/apache/jena/ttl_test/turtle/parser/ParseException.java
index 6dbe9d7..f6d43f3 100644
--- a/jena-core/src/test/java/org/apache/jena/ttl_test/turtle/parser/ParseException.java
+++ b/jena-core/src/test/java/org/apache/jena/ttl_test/turtle/parser/ParseException.java
@@ -210,4 +210,4 @@
    }
 
 }
-/* JavaCC - OriginalChecksum=ecd3464b87732582c6aa01912829856c (do not edit this line) */
+/* JavaCC - OriginalChecksum=10dc416469508e8065e3958be462e2cd (do not edit this line) */
diff --git a/jena-core/src/test/java/org/apache/jena/ttl_test/turtle/parser/Token.java b/jena-core/src/test/java/org/apache/jena/ttl_test/turtle/parser/Token.java
index e3a019c..33f592c 100644
--- a/jena-core/src/test/java/org/apache/jena/ttl_test/turtle/parser/Token.java
+++ b/jena-core/src/test/java/org/apache/jena/ttl_test/turtle/parser/Token.java
@@ -147,4 +147,4 @@
   }
 
 }
-/* JavaCC - OriginalChecksum=b7752bd299ace9b496b80e3041bb8e31 (do not edit this line) */
+/* JavaCC - OriginalChecksum=879d3febc0185e65e0b92d55458baddd (do not edit this line) */
diff --git a/jena-core/src/test/java/org/apache/jena/ttl_test/turtle/parser/TokenMgrError.java b/jena-core/src/test/java/org/apache/jena/ttl_test/turtle/parser/TokenMgrError.java
index bd939e2..6b25d2d 100644
--- a/jena-core/src/test/java/org/apache/jena/ttl_test/turtle/parser/TokenMgrError.java
+++ b/jena-core/src/test/java/org/apache/jena/ttl_test/turtle/parser/TokenMgrError.java
@@ -123,11 +123,10 @@
    * Note: You can customize the lexical error message by modifying this method.
    */
   protected static String LexicalErr(boolean EOFSeen, int lexState, int errorLine, int errorColumn, String errorAfter, int curChar) {
-    char curChar1 = (char)curChar;
     return("Lexical error at line " + //
           errorLine + ", column " + //
           errorColumn + ".  Encountered: " + //
-          (EOFSeen ? "<EOF>" : ("'" + addEscapes(String.valueOf(curChar)) + "' (" + (int)curChar + "),")) + //
+          (EOFSeen ? "<EOF>" : ("'" + addEscapes(String.valueOf(curChar)) + "' (" + curChar + "),")) + //
           (errorAfter == null || errorAfter.length() == 0 ? "" : " after prefix \"" + addEscapes(errorAfter) + "\"")) + //
           (lexState == 0 ? "" : " (in lexical state " + lexState + ")");
   }
@@ -165,4 +164,4 @@
     this(LexicalErr(EOFSeen, lexState, errorLine, errorColumn, errorAfter, curChar), reason);
   }
 }
-/* JavaCC - OriginalChecksum=736a7f2dfde55835f349bdb3205f2740 (do not edit this line) */
+/* JavaCC - OriginalChecksum=1ccc5440ac04daf89788416d736930a7 (do not edit this line) */
diff --git a/jena-core/src/test/java/org/apache/jena/ttl_test/turtle/parser/TurtleParser.java b/jena-core/src/test/java/org/apache/jena/ttl_test/turtle/parser/TurtleParser.java
index 26618b1..2431c43 100644
--- a/jena-core/src/test/java/org/apache/jena/ttl_test/turtle/parser/TurtleParser.java
+++ b/jena-core/src/test/java/org/apache/jena/ttl_test/turtle/parser/TurtleParser.java
@@ -20,8 +20,8 @@
 
 package org.apache.jena.ttl_test.turtle.parser;
 
-import org.apache.jena.graph.* ;
 import org.apache.jena.ttl_test.turtle.*;
+import org.apache.jena.graph.* ;
 
 public class TurtleParser extends TurtleParserBase implements TurtleParserConstants {
 
diff --git a/jena-core/src/test/java/org/apache/jena/ttl_test/turtle/parser/TurtleParserTokenManager.java b/jena-core/src/test/java/org/apache/jena/ttl_test/turtle/parser/TurtleParserTokenManager.java
index a791ffb..e07e1e1 100644
--- a/jena-core/src/test/java/org/apache/jena/ttl_test/turtle/parser/TurtleParserTokenManager.java
+++ b/jena-core/src/test/java/org/apache/jena/ttl_test/turtle/parser/TurtleParserTokenManager.java
@@ -19,8 +19,8 @@
  */
 
 package org.apache.jena.ttl_test.turtle.parser;
-import org.apache.jena.graph.* ;
 import org.apache.jena.ttl_test.turtle.*;
+import org.apache.jena.graph.* ;
 
 /** Token Manager. */
 @SuppressWarnings ("unused")
diff --git a/jena-core/Grammar/README b/jena-core/testing/ttl_test/README
similarity index 71%
rename from jena-core/Grammar/README
rename to jena-core/testing/ttl_test/README
index a454036..712f26a 100644
--- a/jena-core/Grammar/README
+++ b/jena-core/testing/ttl_test/README
@@ -1,4 +1,4 @@
-This is a Turtle parser used in support of jena-core tests.
+This is a Turtle parser used in support of jena-core tests and nothing more.
 
 It is not compliant with RDF 1.1 Turtle.
 
diff --git a/jena-core/Grammar/turtle-parser b/jena-core/testing/ttl_test/turtle-test-parser
similarity index 94%
rename from jena-core/Grammar/turtle-parser
rename to jena-core/testing/ttl_test/turtle-test-parser
index 2ecff0a..1d2a135 100755
--- a/jena-core/Grammar/turtle-parser
+++ b/jena-core/testing/ttl_test/turtle-test-parser
@@ -17,8 +17,8 @@
 
 # Parser builder
 
-DIR="../src/test/java/org/apache/jena/ttl/turtle/parser"
-FILE=turtle.jj
+DIR="../../src/test/java/org/apache/jena/ttl_test/turtle/parser"
+FILE=turtle-test.jj
 CLASS=TurtleParser
 
 (cd "$DIR" ; rm -f *.java )
diff --git a/jena-core/Grammar/turtle.jj b/jena-core/testing/ttl_test/turtle-test.jj
similarity index 96%
rename from jena-core/Grammar/turtle.jj
rename to jena-core/testing/ttl_test/turtle-test.jj
index aaeba46..d9d078d 100644
--- a/jena-core/Grammar/turtle.jj
+++ b/jena-core/testing/ttl_test/turtle-test.jj
@@ -54,9 +54,9 @@
  * limitations under the License.
  */
 
-package org.apache.jena.ttl.turtle.parser;
+package org.apache.jena.ttl_test.turtle.parser;
 
-import org.apache.jena.ttl.turtle.*;
+import org.apache.jena.ttl_test.turtle.*;
 import org.apache.jena.graph.* ;
 
 public class TurtleParser extends TurtleParserBase
@@ -135,7 +135,7 @@
 void Object(Node s, Node p): { Node o ; }
 {
   o = GraphNode() 
-  { Triple t = new Triple(s,p,o) ; 
+  { Triple t = Triple.create(s,p,o) ; 
     emitTriple(token.beginLine, token.beginColumn, t) ; }  
 }
 
@@ -194,12 +194,12 @@
          listHead = cell ;
       if ( lastCell != null )
         emitTriple(token.beginLine, token.beginColumn,
-                   new Triple(lastCell, nRDFrest,  cell)) ;
+                   Triple.create(lastCell, nRDFrest,  cell)) ;
     }
     n = GraphNode()
     {
       emitTriple(token.beginLine, token.beginColumn,
-                 new Triple(cell, nRDFfirst,  n)) ;      
+                 Triple.create(cell, nRDFfirst,  n)) ;      
       lastCell = cell ;
     }
   ) +
@@ -207,7 +207,7 @@
   <RPAREN>
    { if ( lastCell != null )
        emitTriple(token.beginLine, token.beginColumn,
-                  new Triple(lastCell, nRDFrest,  nRDFnil)) ;
+                  Triple.create(lastCell, nRDFrest,  nRDFnil)) ;
      return listHead ; }
 }
 
diff --git a/jena-extras/jena-querybuilder/src/main/java/org/apache/jena/arq/querybuilder/handlers/WhereHandler.java b/jena-extras/jena-querybuilder/src/main/java/org/apache/jena/arq/querybuilder/handlers/WhereHandler.java
index fa0408c..565cc13 100644
--- a/jena-extras/jena-querybuilder/src/main/java/org/apache/jena/arq/querybuilder/handlers/WhereHandler.java
+++ b/jena-extras/jena-querybuilder/src/main/java/org/apache/jena/arq/querybuilder/handlers/WhereHandler.java
@@ -166,18 +166,20 @@
      */
     private static void testTriple(TriplePath t) {
         // verify Triple is valid
-        boolean validSubject = t.getSubject().isURI() || t.getSubject().isBlank() || t.getSubject().isVariable()
-                || t.getSubject().equals(Node.ANY);
+        boolean validSubject =
+                t.getSubject().isURI() || t.getSubject().isBlank() || t.getObject().isNodeTriple()
+                || t.getSubject().isVariable() || t.getSubject().equals(Node.ANY);
         boolean validPredicate;
 
         if (t.isTriple()) {
-            validPredicate = t.getPredicate().isURI() || t.getPredicate().isVariable()
-                    || t.getPredicate().equals(Node.ANY);
+            validPredicate = t.getPredicate().isURI()
+                    || t.getPredicate().isVariable() || t.getPredicate().equals(Node.ANY);
         } else {
             validPredicate = t.getPath() != null;
         }
 
-        boolean validObject = t.getObject().isURI() || t.getObject().isLiteral() || t.getObject().isBlank()
+        boolean validObject =
+                t.getObject().isURI() || t.getObject().isLiteral() || t.getObject().isBlank() || t.getObject().isNodeTriple()
                 || t.getObject().isVariable() || t.getObject().equals(Node.ANY);
 
         if (!validSubject || !validPredicate || !validObject) {
diff --git a/jena-fuseki2/jena-fuseki-core/pom.xml b/jena-fuseki2/jena-fuseki-core/pom.xml
index 9cd6e99..54b3dbd 100644
--- a/jena-fuseki2/jena-fuseki-core/pom.xml
+++ b/jena-fuseki2/jena-fuseki-core/pom.xml
@@ -113,24 +113,8 @@
   </dependencies>
 
   <build>
-    <resources>
-      <resource>
-        <filtering>false</filtering>
-        <directory>src/main/resources</directory>
-        <excludes>
-          <exclude>org/apache/jena/fuseki/fuseki-properties.xml</exclude>
-        </excludes>
-      </resource>
-      <resource>
-        <filtering>true</filtering>
-        <directory>src/main/resources</directory>
-        <includes>
-          <include>org/apache/jena/fuseki/fuseki-properties.xml</include>
-        </includes>
-      </resource>
-    </resources>
-
     <plugins>
+
       <plugin>
         <groupId>org.apache.maven.plugins</groupId>
         <artifactId>maven-compiler-plugin</artifactId>
diff --git a/jena-fuseki2/jena-fuseki-core/src/main/java/org/apache/jena/fuseki/servlets/SPARQL_Update.java b/jena-fuseki2/jena-fuseki-core/src/main/java/org/apache/jena/fuseki/servlets/SPARQL_Update.java
index d8abd4a..86d3416 100644
--- a/jena-fuseki2/jena-fuseki-core/src/main/java/org/apache/jena/fuseki/servlets/SPARQL_Update.java
+++ b/jena-fuseki2/jena-fuseki-core/src/main/java/org/apache/jena/fuseki/servlets/SPARQL_Update.java
@@ -83,7 +83,7 @@
 
     @Override
     public void execGet(HttpAction action) {
-        ServletOps.errorMethodNotAllowed(HttpNames.METHOD_GET, "GET not support for SPARQL Update. Use POST or PATCH");
+        ServletOps.errorMethodNotAllowed(HttpNames.METHOD_GET, "SPARQL Update is not supported with GET. Use POST or PATCH instead");
     }
 
     @Override
@@ -124,8 +124,8 @@
         if ( HttpNames.METHOD_OPTIONS.equals(action.getRequestMethod()) )
             return;
 
-        if ( ! HttpNames.METHOD_POST.equalsIgnoreCase(action.getRequestMethod()) )
-            ServletOps.errorMethodNotAllowed("SPARQL Update : use POST");
+        if ( ! HttpNames.METHOD_POST.equalsIgnoreCase(action.getRequestMethod()) && ! HttpNames.METHOD_PATCH.equalsIgnoreCase(action.getRequestMethod()) )
+            ServletOps.errorMethodNotAllowed("SPARQL Update : use POST or PATCH");
 
         ContentType ct = ActionLib.getContentType(action);
         if ( ct == null )
diff --git a/jena-fuseki2/jena-fuseki-core/src/main/java/org/apache/jena/fuseki/validation/html/QueryValidatorHTML.java b/jena-fuseki2/jena-fuseki-core/src/main/java/org/apache/jena/fuseki/validation/html/QueryValidatorHTML.java
index 642f76e..8a642df 100644
--- a/jena-fuseki2/jena-fuseki-core/src/main/java/org/apache/jena/fuseki/validation/html/QueryValidatorHTML.java
+++ b/jena-fuseki2/jena-fuseki-core/src/main/java/org/apache/jena/fuseki/validation/html/QueryValidatorHTML.java
@@ -46,7 +46,6 @@
     static final String paramFormat      = "outputFormat";
     static final String paramQuery       = "query";
     static final String paramSyntax      = "languageSyntax";
-    // static final String paramSyntaxExtended = "extendedSyntax";
 
     public static void executeHTML(HttpServletRequest httpRequest, HttpServletResponse httpResponse) {
         try {
diff --git a/jena-fuseki2/jena-fuseki-core/src/main/resources/org/apache/jena/fuseki/fuseki-properties.xml b/jena-fuseki2/jena-fuseki-core/src/main/resources/org/apache/jena/fuseki/fuseki-properties.xml
deleted file mode 100644
index 34082eb..0000000
--- a/jena-fuseki2/jena-fuseki-core/src/main/resources/org/apache/jena/fuseki/fuseki-properties.xml
+++ /dev/null
@@ -1,8 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!DOCTYPE properties SYSTEM "http://java.sun.com/dtd/properties.dtd">
-<!-- Licensed under the terms of http://www.apache.org/licenses/LICENSE-2.0" -->
-<properties version="1.0">
-  <comment>Fuseki System Properties</comment>
-  <entry key="org.apache.jena.fuseki.version">${project.version}</entry>
-  <entry key="org.apache.jena.fuseki.build.datetime">${build.time.xsd}</entry>
-</properties>
diff --git a/jena-fuseki2/jena-fuseki-docker/Dockerfile b/jena-fuseki2/jena-fuseki-docker/Dockerfile
index 9f9828c..f947fc4 100644
--- a/jena-fuseki2/jena-fuseki-docker/Dockerfile
+++ b/jena-fuseki2/jena-fuseki-docker/Dockerfile
@@ -6,7 +6,7 @@
 ## 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.
@@ -72,12 +72,6 @@
 ADD entrypoint.sh .
 ADD log4j2.properties .
 
-# Run as this user
-# -H : no home directorry
-# -D : no password
-
-RUN adduser -H -D fuseki fuseki
-
 ## ---- Stage: Build runtime
 FROM alpine:${ALPINE_VERSION}
 
@@ -89,18 +83,32 @@
 
 COPY --from=base /opt/java-minimal /opt/java-minimal
 COPY --from=base /fuseki /fuseki
-COPY --from=base /etc/passwd /etc/passwd
 
 WORKDIR $FUSEKI_DIR
 
 ARG LOGS=${FUSEKI_DIR}/logs
 ARG DATA=${FUSEKI_DIR}/databases
 
+ARG JENA_USER=fuseki
+ARG JENA_GROUP=$JENA_USER
+ARG JENA_GID=1000
+ARG JENA_UID=1000
+
+# Run as this user
+# -H : no home directory
+# -D : no password
+RUN addgroup -g "${JENA_GID}" "${JENA_GROUP}" && \
+    adduser "${JENA_USER}" -G "${JENA_GROUP}" -s /bin/ash -u "${JENA_UID}" -H -D
+
+RUN mkdir --parents "${FUSEKI_DIR}" && \
+    chown -R $JENA_USER ${FUSEKI_DIR}
+
+USER $JENA_USER
+
 RUN \
     mkdir -p $LOGS && \
     mkdir -p $DATA && \
-    chown -R fuseki ${FUSEKI_DIR} && \
-    chmod a+x entrypoint.sh 
+    chmod a+x entrypoint.sh
 
 ## Default environment variables.
 ENV \
@@ -110,8 +118,6 @@
     FUSEKI_JAR="${FUSEKI_JAR}"          \
     FUSEKI_DIR="${FUSEKI_DIR}"
 
-USER fuseki
-
 EXPOSE 3030
 
 ENTRYPOINT ["./entrypoint.sh" ]
diff --git a/jena-fuseki2/jena-fuseki-docker/README.md b/jena-fuseki2/jena-fuseki-docker/README.md
index c8d72b7..84cfd2e 100644
--- a/jena-fuseki2/jena-fuseki-docker/README.md
+++ b/jena-fuseki2/jena-fuseki-docker/README.md
@@ -40,7 +40,7 @@
 
 ## Test Run
 
-`docker-compose run` cam be used to test the build from the previous section.
+`docker-compose run` can be used to test the build from the previous section.
 
 Examples:
 
diff --git a/jena-fuseki2/jena-fuseki-docker/download.sh b/jena-fuseki2/jena-fuseki-docker/download.sh
index bf4e2ae..211eca7 100755
--- a/jena-fuseki2/jena-fuseki-docker/download.sh
+++ b/jena-fuseki2/jena-fuseki-docker/download.sh
@@ -18,7 +18,7 @@
 # limitations under the License.
 
 # This is an ash/dash script (it uses "local"), not a bash script.
-# It can run in an Alpine image durign a docker build.
+# It can run in an Alpine image during a docker build.
 #
 # The advantage over using docker ADD is that it checks
 # whether download file is already present and does not
@@ -38,46 +38,46 @@
 
 while [ $# -gt 0 ] ; do
     case "$1" in
-	--chksum|-chksum|-sha|--sha)
-	    if [ $# -lt 2 ]
-	    then
-		echo "$USAGE" 1>&2
-		exit 1
-	    fi
-	    CHKSUM_TYPE=$2
-	    shift
-	    shift
-	    ;;
-	-h|--help)
-	    echo "$USAGE" 1>&2
-	    exit 0
-	    ;;
-	-*)
-	    echo "$USAGE" 1>&2
-	    exit 1
-	    ;;
-	*)
-	    if [ $# -ne 1 ]
-	    then
-		echo "$USAGE" 1>&2
-		exit 1
-	    fi
-	    URL="$1"
-	    shift
-	    ;;
+    --chksum|-chksum|-sha|--sha)
+        if [ $# -lt 2 ]
+        then
+        echo "$USAGE" 1>&2
+        exit 1
+        fi
+        CHKSUM_TYPE=$2
+        shift
+        shift
+        ;;
+    -h|--help)
+        echo "$USAGE" 1>&2
+        exit 0
+        ;;
+    -*)
+        echo "$USAGE" 1>&2
+        exit 1
+        ;;
+    *)
+        if [ $# -ne 1 ]
+        then
+        echo "$USAGE" 1>&2
+        exit 1
+        fi
+        URL="$1"
+        shift
+        ;;
     esac
 done
 
 case "${CHKSUM_TYPE}" in
     unset)
-	echo "$USAGE" 1>&2
-	exit 1
-	;;
+    echo "$USAGE" 1>&2
+    exit 1
+    ;;
     sha*|md5) ;;
     *)
-	echo "Bad checksum type: '$CHKSUM_TYPE' (must start 'sha' or be 'md5')" 2>&1
-	exit 1	 
-	;;
+    echo "Bad checksum type: '$CHKSUM_TYPE' (must start 'sha' or be 'md5')" 2>&1
+    exit 1
+    ;;
 esac
 
 ## ---- Script starts ----
@@ -105,11 +105,11 @@
     local FN="$(basename "$URL")"
     if [ ! -e "$FN" ]
     then
-	echo "Fetching $URL"
-	curl $CURL_FETCH_OPTS "$URL" --output "$FN" \
-	    || { echo "Bad download of $FN" 2>&1 ; return 1 ; }
+    echo "Fetching $URL"
+    curl $CURL_FETCH_OPTS "$URL" --output "$FN" \
+        || { echo "Bad download of $FN" 2>&1 ; return 1 ; }
     else
-	echo "$FN already present"
+    echo "$FN already present"
     fi
     return 0
 }
@@ -119,8 +119,8 @@
     local CHKSUM="$2"
     if [ ! -e "$FN" ]
     then
-	echo "No such file: '$FN'" 2>&1
-	exit 1
+    echo "No such file: '$FN'" 2>&1
+    exit 1
     fi
     # NB Two spaces required for busybox
     echo "$CHKSUM  $FN" | ${CHKSUMPROG} -c > /dev/null
diff --git a/jena-fuseki2/jena-fuseki-main/src/main/java/org/apache/jena/fuseki/main/cmds/FusekiMain.java b/jena-fuseki2/jena-fuseki-main/src/main/java/org/apache/jena/fuseki/main/cmds/FusekiMain.java
index d898ada..87c24d7 100644
--- a/jena-fuseki2/jena-fuseki-main/src/main/java/org/apache/jena/fuseki/main/cmds/FusekiMain.java
+++ b/jena-fuseki2/jena-fuseki-main/src/main/java/org/apache/jena/fuseki/main/cmds/FusekiMain.java
@@ -206,7 +206,7 @@
         add(argWithMetrics, "--metrics",    "Enable /$/metrics");
         add(argWithCompact, "--compact",    "Enable /$/compact/*");
 
-        super.modVersion.addClass(Fuseki.class);
+        super.modVersion.addClass("Fuseki", Fuseki.class);
     }
 
     static String argUsage = "[--config=FILE] [--mem|--desc=AssemblerFile|--file=FILE] [--port PORT] /DatasetPathName";
diff --git a/jena-fuseki2/jena-fuseki-ui/pom.xml b/jena-fuseki2/jena-fuseki-ui/pom.xml
index c5d4093..38bcd80 100644
--- a/jena-fuseki2/jena-fuseki-ui/pom.xml
+++ b/jena-fuseki2/jena-fuseki-ui/pom.xml
@@ -41,7 +41,7 @@
             <plugin>
                 <groupId>org.codehaus.mojo</groupId>
                 <artifactId>build-helper-maven-plugin</artifactId>
-                <version>3.3.0</version>
+                <version>3.4.0</version>
                 <executions>
                     <execution>
                         <id>reserve-network-port</id>
diff --git a/jena-fuseki2/jena-fuseki-webapp/src/main/java/org/apache/jena/fuseki/cmd/FusekiCmd.java b/jena-fuseki2/jena-fuseki-webapp/src/main/java/org/apache/jena/fuseki/cmd/FusekiCmd.java
index a0c03fb..ef137b7 100644
--- a/jena-fuseki2/jena-fuseki-webapp/src/main/java/org/apache/jena/fuseki/cmd/FusekiCmd.java
+++ b/jena-fuseki2/jena-fuseki-webapp/src/main/java/org/apache/jena/fuseki/cmd/FusekiCmd.java
@@ -43,7 +43,6 @@
 import org.apache.jena.sparql.core.DatasetGraphFactory;
 import org.apache.jena.sys.JenaSystem;
 import org.apache.jena.system.Txn;
-import org.apache.jena.tdb.TDB;
 import org.apache.jena.tdb.sys.Names;
 import org.slf4j.Logger;
 
@@ -154,7 +153,6 @@
             add(argGZip, "--gzip=on|off",
                 "Enable GZip compression (HTTP Accept-Encoding) if request header set");
 
-            super.modVersion.addClass(TDB.class);
             super.modVersion.addClass(Fuseki.class);
         }
 
diff --git a/jena-jdbc/jena-jdbc-driver-mem/src/main/java/org/apache/jena/jdbc/mem/metadata/MemDatasetMetadata.java b/jena-jdbc/jena-jdbc-driver-mem/src/main/java/org/apache/jena/jdbc/mem/metadata/MemDatasetMetadata.java
index 531abe5..d3a152e 100644
--- a/jena-jdbc/jena-jdbc-driver-mem/src/main/java/org/apache/jena/jdbc/mem/metadata/MemDatasetMetadata.java
+++ b/jena-jdbc/jena-jdbc-driver-mem/src/main/java/org/apache/jena/jdbc/mem/metadata/MemDatasetMetadata.java
@@ -24,16 +24,12 @@
 import org.apache.jena.jdbc.JenaJDBC ;
 import org.apache.jena.jdbc.connections.DatasetConnection ;
 import org.apache.jena.jdbc.metadata.DatasetMetadata ;
-import org.apache.jena.query.ARQ ;
 
 /**
  * Connection metadata for in-memory datasets
  *
  */
 public class MemDatasetMetadata extends DatasetMetadata {
-    
-    private Version arq;
-    private Version jdbc;
 
     /**
      * Creates new metadata
@@ -42,10 +38,6 @@
      */
     public MemDatasetMetadata(DatasetConnection connection) throws SQLException {
         super(connection);
-        arq = new Version();
-        arq.addClass(ARQ.class);
-        jdbc = new Version();
-        jdbc.addClass(JenaJDBC.class);
     }
 
     @Override
@@ -65,7 +57,7 @@
 
     @Override
     public String getDatabaseProductVersion() {
-        return arq.toString();
+        return Version.versionForClass(JenaJDBC.class).orElse("<development>");
     }
 
     @Override
@@ -85,12 +77,12 @@
 
     @Override
     public String getDriverVersion() {
-        return jdbc.toString();
+        return getDatabaseProductVersion();
     }
 
     @Override
     public String getURL() {
-        return "http://jena.apache.org";
+        return "https://jena.apache.org";
     }
 
     @Override
diff --git a/jena-jdbc/jena-jdbc-driver-remote/src/main/java/org/apache/jena/jdbc/remote/metadata/RemoteEndpointMetadata.java b/jena-jdbc/jena-jdbc-driver-remote/src/main/java/org/apache/jena/jdbc/remote/metadata/RemoteEndpointMetadata.java
index 5fde4ca..27cf191 100644
--- a/jena-jdbc/jena-jdbc-driver-remote/src/main/java/org/apache/jena/jdbc/remote/metadata/RemoteEndpointMetadata.java
+++ b/jena-jdbc/jena-jdbc-driver-remote/src/main/java/org/apache/jena/jdbc/remote/metadata/RemoteEndpointMetadata.java
@@ -28,24 +28,21 @@
 
 /**
  * Represents metadata about connections to remote endpoints
- * 
+ *
  */
 public class RemoteEndpointMetadata extends JenaMetadata {
 
-    private Version jdbc;
     private RemoteEndpointConnection remoteConn;
 
     /**
      * Creates new metadata
-     * 
+     *
      * @param connection
      *            Remote Endpoint connection
      * @throws SQLException
      */
     public RemoteEndpointMetadata(RemoteEndpointConnection connection) throws SQLException {
         super(connection);
-        this.jdbc = new Version();
-        this.jdbc.addClass(JenaJDBC.class);
         this.remoteConn = connection;
     }
 
@@ -100,7 +97,7 @@
 
     @Override
     public String getDriverVersion() {
-        return jdbc.toString();
+        return Version.versionForClass(JenaJDBC.class).orElse("<development>");
     }
 
     @Override
diff --git a/jena-jdbc/jena-jdbc-driver-tdb/src/main/java/org/apache/jena/jdbc/tdb/metadata/TDBDatasetMetadata.java b/jena-jdbc/jena-jdbc-driver-tdb/src/main/java/org/apache/jena/jdbc/tdb/metadata/TDBDatasetMetadata.java
index 800ef6d..bfef190 100644
--- a/jena-jdbc/jena-jdbc-driver-tdb/src/main/java/org/apache/jena/jdbc/tdb/metadata/TDBDatasetMetadata.java
+++ b/jena-jdbc/jena-jdbc-driver-tdb/src/main/java/org/apache/jena/jdbc/tdb/metadata/TDBDatasetMetadata.java
@@ -25,16 +25,12 @@
 import org.apache.jena.jdbc.JenaJDBC ;
 import org.apache.jena.jdbc.connections.DatasetConnection ;
 import org.apache.jena.jdbc.metadata.DatasetMetadata ;
-import org.apache.jena.tdb.TDB ;
 
 /**
  * Connection metadata for TDB datasets
  *
  */
 public class TDBDatasetMetadata extends DatasetMetadata {
-    
-    private Version tdb;
-    private Version jdbc;
 
     /**
      * Creates new metadata
@@ -43,10 +39,6 @@
      */
     public TDBDatasetMetadata(DatasetConnection connection) throws SQLException {
         super(connection);
-        tdb = new Version();
-        tdb.addClass(TDB.class);
-        jdbc = new Version();
-        jdbc.addClass(JenaJDBC.class);
     }
 
     @Override
@@ -66,9 +58,9 @@
 
     @Override
     public String getDatabaseProductVersion() {
-        return tdb.toString(true);
+        return Version.versionForClass(JenaJDBC.class).orElse("<development>");
     }
-    
+
     @Override
     public int getDefaultTransactionIsolation() {
         return Connection.TRANSACTION_SERIALIZABLE;
@@ -86,17 +78,17 @@
 
     @Override
     public String getDriverName() {
-        return "Apache Jena - JDBC - TDB Driver";
+        return "Apache Jena - JDBC - TDB1 Driver";
     }
 
     @Override
     public String getDriverVersion() {
-        return jdbc.toString(true);
+        return Version.versionForClass(JenaJDBC.class).orElse("<development>");
     }
 
     @Override
     public String getURL() {
-        return "http://jena.apache.org";
+        return "https://jena.apache.org";
     }
 
     @Override
diff --git a/jena-permissions/pom.xml b/jena-permissions/pom.xml
index c2ae94a..1ca970f 100644
--- a/jena-permissions/pom.xml
+++ b/jena-permissions/pom.xml
@@ -53,7 +53,7 @@
       <plugin>
         <groupId>org.codehaus.mojo</groupId>
         <artifactId>build-helper-maven-plugin</artifactId>
-        <version>3.3.0</version>
+        <version>3.4.0</version>
         <executions>
           <execution>
             <id>add-example-source</id>
diff --git a/jena-tdb1/pom.xml b/jena-tdb1/pom.xml
index 7837991..a3fd638 100644
--- a/jena-tdb1/pom.xml
+++ b/jena-tdb1/pom.xml
@@ -83,25 +83,7 @@
   </dependencies>
 
   <build>
-    <resources>
-      <resource>
-        <filtering>false</filtering>
-        <directory>src/main/resources</directory>
-        <excludes>
-          <exclude>org/apache/jena/tdb/tdb-properties.xml</exclude>
-        </excludes>
-      </resource>
-      <resource>
-        <filtering>true</filtering>
-        <directory>src/main/resources</directory>
-        <includes>
-          <include>org/apache/jena/tdb/tdb-properties.xml</include>
-        </includes>
-      </resource>
-    </resources>
-
     <plugins>
-
       <plugin>
         <groupId>org.apache.maven.plugins</groupId>
         <artifactId>maven-resources-plugin</artifactId>
diff --git a/jena-tdb1/src/main/resources/org/apache/jena/tdb/tdb-properties.xml b/jena-tdb1/src/main/resources/org/apache/jena/tdb/tdb-properties.xml
deleted file mode 100644
index 67d8255..0000000
--- a/jena-tdb1/src/main/resources/org/apache/jena/tdb/tdb-properties.xml
+++ /dev/null
@@ -1,8 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!DOCTYPE properties SYSTEM "http://java.sun.com/dtd/properties.dtd">
-<!-- Licensed under the terms of http://www.apache.org/licenses/LICENSE-2.0 -->
-<properties version="1.0">
-  <comment>TDB System Properties</comment>
-  <entry key="org.apache.jena.tdb.version">${project.version}</entry>
-  <entry key="org.apache.jena.tdb.build.datetime">${build.time.xsd}</entry>
-</properties>
diff --git a/jena-tdb2/pom.xml b/jena-tdb2/pom.xml
index 287298e..bdfc93e 100644
--- a/jena-tdb2/pom.xml
+++ b/jena-tdb2/pom.xml
@@ -76,24 +76,7 @@
   </dependencies>
 
   <build>
-    <resources>
-      <resource>
-        <filtering>false</filtering>
-        <directory>src/main/resources</directory>
-        <excludes>
-          <exclude>org/apache/jena/tdb2/tdb2-properties.xml</exclude>
-        </excludes>
-      </resource>
-      <resource>
-        <filtering>true</filtering>
-        <directory>src/main/resources</directory>
-        <includes>
-          <include>org/apache/jena/tdb2/tdb2-properties.xml</include>
-        </includes>
-      </resource>
-    </resources>
-
-    <plugins> 
+    <plugins>
 
       <plugin>
         <groupId>org.apache.maven.plugins</groupId>
diff --git a/jena-tdb2/src/main/resources/org/apache/jena/tdb2/tdb2-properties.xml b/jena-tdb2/src/main/resources/org/apache/jena/tdb2/tdb2-properties.xml
deleted file mode 100644
index e494352..0000000
--- a/jena-tdb2/src/main/resources/org/apache/jena/tdb2/tdb2-properties.xml
+++ /dev/null
@@ -1,8 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!DOCTYPE properties SYSTEM "http://java.sun.com/dtd/properties.dtd">
-<!-- Licensed under the terms of http://www.apache.org/licenses/LICENSE-2.0 -->
-<properties version="1.0">
-  <comment>TDB2 System Properties</comment>
-  <entry key="org.apache.jena.tdb2.version">${project.version}</entry>
-  <entry key="org.apache.jena.tdb2.build.datetime">${build.time.xsd}</entry>
-</properties>
diff --git a/pom.xml b/pom.xml
index 7247e5c..52b8dba 100644
--- a/pom.xml
+++ b/pom.xml
@@ -71,7 +71,7 @@
     <ver.jetty>10.0.15</ver.jetty>
     <ver.shiro>1.11.0</ver.shiro>
 
-    <ver.protobuf>3.22.3</ver.protobuf>
+    <ver.protobuf>3.23.2</ver.protobuf>
     <ver.libthrift>0.18.1</ver.libthrift>
 
     <!-- JSON-LD 1.1 -->
@@ -88,11 +88,11 @@
          and use that or later.
     -->
     <ver.jsonldjava>0.13.4</ver.jsonldjava>
-    <ver.jackson>2.15.0</ver.jackson>
+    <ver.jackson>2.15.2</ver.jackson>
     <ver.httpclient>4.5.14</ver.httpclient>
     <ver.httpcore>4.4.16</ver.httpcore>
 
-    <ver.shaded-guava>31.1-jre</ver.shaded-guava>
+    <ver.shaded-guava>32.0.0-jre</ver.shaded-guava>
     <ver.gson>2.10.1</ver.gson>
     <ver.commonsio>2.11.0</ver.commonsio>
     <ver.commonscli>1.5.0</ver.commonscli>
@@ -103,7 +103,7 @@
     <ver.commons-compress>1.23.0</ver.commons-compress>
     <ver.commons-collections>4.4</ver.commons-collections>
     <ver.dexxcollection>0.7</ver.dexxcollection>
-    <ver.micrometer>1.10.6</ver.micrometer>
+    <ver.micrometer>1.11.0</ver.micrometer>
 
     <!-- For testing, not shipped -->
     <ver.graalvm>22.3.2</ver.graalvm>