Merge
authorpaulson <lp15@cam.ac.uk>
Mon, 29 Feb 2016 15:13:11 +0000
changeset 62464 08e62096e7f4
parent 62463 547c5c6e66d4 (current diff)
parent 62461 075ef5ec115c (diff)
child 62465 2e4c6ef809b5
Merge
Admin/isatest/settings/at-poly-e
Admin/isatest/settings/at-poly-test
Admin/isatest/settings/mac-poly-M2-alternative
lib/Tools/update_semicolons
lib/Tools/update_sub_sup
lib/Tools/yxml
lib/scripts/run-polyml-5.5.1
lib/scripts/run-polyml-5.5.2
lib/scripts/run-polyml-5.6
lib/scripts/update_sub_sup
lib/scripts/yxml
src/HOL/Multivariate_Analysis/Cauchy_Integral_Thm.thy
src/Pure/ML/ml_statistics_polyml-5.5.0.ML
src/Pure/RAW/ROOT_polyml-5.5.2.ML
src/Pure/RAW/exn_trace_polyml-5.5.1.ML
src/Pure/Tools/check_source.scala
src/Pure/Tools/update_semicolons.scala
--- a/Admin/Release/CHECKLIST	Mon Feb 29 11:42:15 2016 +0000
+++ b/Admin/Release/CHECKLIST	Mon Feb 29 15:13:11 2016 +0000
@@ -5,14 +5,14 @@
 
 - check Admin/components;
 
-- test polyml-5.4.1, polyml-5.4.0, polyml-5.3.0;
+- test polyml-5.3.0;
 
 - test 'display_drafts' command;
 
 - test "#!/usr/bin/env isabelle_scala_script";
 
 - check sources:
-    isabelle java isabelle.Check_Source '~~' '$AFP_BASE'
+    isabelle check_sources '~~' '$AFP_BASE'
 
 - check ANNOUNCE, README, NEWS, COPYRIGHT, CONTRIBUTORS;
 
--- a/Admin/components/components.sha1	Mon Feb 29 11:42:15 2016 +0000
+++ b/Admin/components/components.sha1	Mon Feb 29 15:13:11 2016 +0000
@@ -42,6 +42,7 @@
 2730e1475c7d655655882e75743e0b451725a274  isabelle_fonts-20151231.tar.gz
 1f004a6bf20088a7e8f1b3d4153aa85de6fc1091  isabelle_fonts-20160101.tar.gz
 379d51ef3b71452dac34ba905def3daa8b590f2e  isabelle_fonts-20160102.tar.gz
+878536aab1eaf1a52da560c20bb41ab942971fa3  isabelle_fonts-20160227.tar.gz
 8d83e433c1419e0c0cc5fd1762903d11b4a5752c  jdk-6u31.tar.gz
 38d2d2a91c66714c18430e136e7e5191af3996e6  jdk-7u11.tar.gz
 d765bc4ad2f34d494429b2a8c1563c49db224944  jdk-7u13.tar.gz
--- a/Admin/components/main	Mon Feb 29 11:42:15 2016 +0000
+++ b/Admin/components/main	Mon Feb 29 15:13:11 2016 +0000
@@ -4,7 +4,7 @@
 cvc4-1.5pre-3
 e-1.8
 Haskabelle-2015
-isabelle_fonts-20160102
+isabelle_fonts-20160227
 jdk-8u72
 jedit_build-20151124
 jfreechart-1.0.14-1
--- a/Admin/isatest/isatest-makedist	Mon Feb 29 11:42:15 2016 +0000
+++ b/Admin/isatest/isatest-makedist	Mon Feb 29 15:13:11 2016 +0000
@@ -102,10 +102,7 @@
 
 $SSH lxbroy10 "$MAKEALL -x HOL-Proofs $HOME/settings/at64-poly"
 sleep 15
-$SSH lxbroy4 "
-  $MAKEALL -l HOL-Library $HOME/settings/at-poly;
-  $MAKEALL -l HOL-Library $HOME/settings/at-poly-e;
-  $MAKEALL $HOME/settings/at-poly-test"
+$SSH lxbroy4 "$MAKEALL -l HOL-Library $HOME/settings/at-poly"
 sleep 15
 $SSH macbroy2 "
   $MAKEALL $HOME/settings/mac-poly64-M4;
@@ -115,11 +112,9 @@
   $MAKEALL $HOME/settings/mac-poly-M8-skip_proofs;
   $MAKEALL $HOME/settings/mac-poly-M8-quick_and_dirty"
 sleep 15
-$SSH macbroy30 "
-  $MAKEALL $HOME/settings/mac-poly-M2;
-  $MAKEALL $HOME/settings/mac-poly64-M2"
+$SSH macbroy30 "$MAKEALL $HOME/settings/mac-poly-M2"
 sleep 15
-$SSH macbroy31 "$MAKEALL $HOME/settings/mac-poly-M2-alternative"
+$SSH macbroy31 "$MAKEALL $MAKEALL $HOME/settings/mac-poly64-M2"
 
 echo ------------------- spawned tests successfully --- `date` --- $HOSTNAME >> $DISTLOG 2>&1
 
--- a/Admin/isatest/settings/at-poly-e	Mon Feb 29 11:42:15 2016 +0000
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,30 +0,0 @@
-# -*- shell-script -*- :mode=shellscript:
-
-init_components /home/isabelle/contrib "$HOME/admin/components/main"
-
-  POLYML_HOME="/home/polyml/polyml-5.4.1"
-  ML_SYSTEM="polyml-5.4.1"
-  ML_PLATFORM="x86-linux"
-  ML_HOME="$POLYML_HOME/$ML_PLATFORM"
-  ML_OPTIONS="-H 1000"
-
-ISABELLE_GHC=/usr/bin/ghc
-
-ISABELLE_HOME_USER=~/isabelle-at-poly-e
-
-# Where to look for isabelle tools (multiple dirs separated by ':').
-ISABELLE_TOOLS="$ISABELLE_HOME/lib/Tools"
-
-# Location for temporary files (should be on a local file system).
-ISABELLE_TMP_PREFIX="/tmp/isabelle-$USER"
-
-
-# Heap input locations. ML system identifier is included in lookup.
-ISABELLE_PATH="$ISABELLE_HOME_USER/heaps:$ISABELLE_HOME/heaps"
-
-# Heap output location. ML system identifier is appended automatically later on.
-ISABELLE_OUTPUT="$ISABELLE_HOME_USER/heaps"
-ISABELLE_BROWSER_INFO="$ISABELLE_HOME_USER/browser_info"
-
-ISABELLE_BUILD_OPTIONS="browser_info=true document=pdf"
-
--- a/Admin/isatest/settings/at-poly-test	Mon Feb 29 11:42:15 2016 +0000
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,34 +0,0 @@
-# -*- shell-script -*- :mode=shellscript:
-
-init_components /home/isabelle/contrib "$HOME/admin/components/main"
-
-  POLYML_HOME="/home/polyml/polyml-svn"
-  ML_SYSTEM="polyml-5.5.2"
-  ML_PLATFORM="x86-linux"
-  ML_HOME="$POLYML_HOME/$ML_PLATFORM"
-  ML_OPTIONS="-H 500 --gcthreads 4"
-
-ISABELLE_GHC=/usr/bin/ghc
-
-ISABELLE_HOME_USER=~/isabelle-at-poly-test
-
-# Where to look for isabelle tools (multiple dirs separated by ':').
-ISABELLE_TOOLS="$ISABELLE_HOME/lib/Tools"
-
-# Location for temporary files (should be on a local file system).
-ISABELLE_TMP_PREFIX="/tmp/isabelle-$USER"
-
-
-# Heap input locations. ML system identifier is included in lookup.
-ISABELLE_PATH="$ISABELLE_HOME_USER/heaps:$ISABELLE_HOME/heaps"
-
-# Heap output location. ML system identifier is appended automatically later on.
-ISABELLE_OUTPUT="$ISABELLE_HOME_USER/heaps"
-ISABELLE_BROWSER_INFO="$ISABELLE_HOME_USER/browser_info"
-
-ISABELLE_BUILD_OPTIONS="browser_info=true document=pdf threads=4 parallel_proofs=2"
-
-ISABELLE_GHC="/usr/bin/ghc"
-ISABELLE_OCAML="/usr/bin/ocaml"
-ISABELLE_SWIPL="/usr/bin/swipl"
-
--- a/Admin/isatest/settings/mac-poly-M2	Mon Feb 29 11:42:15 2016 +0000
+++ b/Admin/isatest/settings/mac-poly-M2	Mon Feb 29 15:13:11 2016 +0000
@@ -4,10 +4,9 @@
 init_components /home/isabelle/contrib "$HOME/admin/components/optional"
 init_components /home/isabelle/contrib "$HOME/admin/components/nonfree"
 
-ML_SYSTEM="polyml-5.5.0"
-ML_PLATFORM="x86-darwin"
-ML_HOME="/home/polyml/polyml-5.5.0/$ML_PLATFORM"
-ML_OPTIONS="-H 500"
+ML_PLATFORM="$ISABELLE_PLATFORM32"
+ML_HOME="$POLYML_HOME/$ML_PLATFORM"
+ML_OPTIONS="-H 1000 --gcthreads 4"
 
 ISABELLE_GHC=ghc
 
@@ -28,4 +27,3 @@
 ISABELLE_BROWSER_INFO="$ISABELLE_HOME_USER/browser_info"
 
 ISABELLE_BUILD_OPTIONS="browser_info=true document=pdf threads=2 parallel_proofs=2"
-
--- a/Admin/isatest/settings/mac-poly-M2-alternative	Mon Feb 29 11:42:15 2016 +0000
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,29 +0,0 @@
-# -*- shell-script -*- :mode=shellscript:
-
-init_components /home/isabelle/contrib "$HOME/admin/components/main"
-init_components /home/isabelle/contrib "$HOME/admin/components/optional"
-init_components /home/isabelle/contrib "$HOME/admin/components/nonfree"
-
-ML_PLATFORM="$ISABELLE_PLATFORM32"
-ML_HOME="$POLYML_HOME/$ML_PLATFORM"
-ML_OPTIONS="-H 1000"
-
-ISABELLE_HOME_USER=~/isabelle-mac-poly-M2-alternative
-
-# Where to look for isabelle tools (multiple dirs separated by ':').
-ISABELLE_TOOLS="$ISABELLE_HOME/lib/Tools"
-
-# Location for temporary files (should be on a local file system).
-ISABELLE_TMP_PREFIX="/tmp/isabelle-$USER"
-
-
-# Heap input locations. ML system identifier is included in lookup.
-ISABELLE_PATH="$ISABELLE_HOME_USER/heaps:$ISABELLE_HOME/heaps"
-
-# Heap output location. ML system identifier is appended automatically later on.
-ISABELLE_OUTPUT="$ISABELLE_HOME_USER/heaps"
-ISABELLE_BROWSER_INFO="$ISABELLE_HOME_USER/browser_info"
-
-ISABELLE_BUILD_OPTIONS="browser_info=true document=pdf threads=2 parallel_proofs=2"
-
-ISABELLE_GHC=ghc
--- a/Admin/isatest/settings/mac-poly-M4	Mon Feb 29 11:42:15 2016 +0000
+++ b/Admin/isatest/settings/mac-poly-M4	Mon Feb 29 15:13:11 2016 +0000
@@ -1,10 +1,12 @@
 # -*- shell-script -*- :mode=shellscript:
 
 init_components /home/isabelle/contrib "$HOME/admin/components/main"
+init_components /home/isabelle/contrib "$HOME/admin/components/optional"
+init_components /home/isabelle/contrib "$HOME/admin/components/nonfree"
 
 ML_PLATFORM="$ISABELLE_PLATFORM32"
 ML_HOME="$POLYML_HOME/$ML_PLATFORM"
-ML_OPTIONS="-H 500 --gcthreads 4"
+ML_OPTIONS="-H 1000 --gcthreads 4"
 
 ISABELLE_HOME_USER=~/isabelle-mac-poly-M4
 
--- a/Admin/isatest/settings/mac-poly-M8	Mon Feb 29 11:42:15 2016 +0000
+++ b/Admin/isatest/settings/mac-poly-M8	Mon Feb 29 15:13:11 2016 +0000
@@ -1,10 +1,12 @@
 # -*- shell-script -*- :mode=shellscript:
 
 init_components /home/isabelle/contrib "$HOME/admin/components/main"
+init_components /home/isabelle/contrib "$HOME/admin/components/optional"
+init_components /home/isabelle/contrib "$HOME/admin/components/nonfree"
 
 ML_PLATFORM="$ISABELLE_PLATFORM32"
 ML_HOME="$POLYML_HOME/$ML_PLATFORM"
-ML_OPTIONS="-H 500 --gcthreads 8"
+ML_OPTIONS="-H 1000 --gcthreads 8"
 
 ISABELLE_HOME_USER=~/isabelle-mac-poly-M8
 
--- a/Admin/isatest/settings/mac-poly-M8-quick_and_dirty	Mon Feb 29 11:42:15 2016 +0000
+++ b/Admin/isatest/settings/mac-poly-M8-quick_and_dirty	Mon Feb 29 15:13:11 2016 +0000
@@ -1,14 +1,12 @@
 # -*- shell-script -*- :mode=shellscript:
 
 init_components /home/isabelle/contrib "$HOME/admin/components/main"
+init_components /home/isabelle/contrib "$HOME/admin/components/optional"
+init_components /home/isabelle/contrib "$HOME/admin/components/nonfree"
 
-  POLYML_HOME="/home/polyml/polyml-5.5.1"
-  ML_SYSTEM="polyml-5.5.1"
-  ML_PLATFORM="x86-darwin"
-  ML_HOME="$POLYML_HOME/$ML_PLATFORM"
-  ML_OPTIONS="-H 1000"
-
-ISABELLE_GHC=ghc
+ML_PLATFORM="$ISABELLE_PLATFORM32"
+ML_HOME="$POLYML_HOME/$ML_PLATFORM"
+ML_OPTIONS="-H 1000 --gcthreads 8"
 
 ISABELLE_HOME_USER=~/isabelle-mac-poly-M8-quick_and_dirty
 
@@ -27,3 +25,11 @@
 ISABELLE_BROWSER_INFO="$ISABELLE_HOME_USER/browser_info"
 
 ISABELLE_BUILD_OPTIONS="threads=8 quick_and_dirty"
+
+ISABELLE_GHC=ghc
+ISABELLE_MLTON=mlton
+ISABELLE_OCAML=ocaml
+ISABELLE_OCAMLC=ocamlc
+ISABELLE_POLYML="$ML_HOME/poly"
+#ISABELLE_SCALA="$SCALA_HOME/bin"
+ISABELLE_SMLNJ="/mnt/nfsbroy/home/smlnj/bin/sml"
--- a/Admin/isatest/settings/mac-poly-M8-skip_proofs	Mon Feb 29 11:42:15 2016 +0000
+++ b/Admin/isatest/settings/mac-poly-M8-skip_proofs	Mon Feb 29 15:13:11 2016 +0000
@@ -1,14 +1,12 @@
 # -*- shell-script -*- :mode=shellscript:
 
 init_components /home/isabelle/contrib "$HOME/admin/components/main"
+init_components /home/isabelle/contrib "$HOME/admin/components/optional"
+init_components /home/isabelle/contrib "$HOME/admin/components/nonfree"
 
-  POLYML_HOME="/home/polyml/polyml-5.5.0"
-  ML_SYSTEM="polyml-5.5.0"
-  ML_PLATFORM="x86-darwin"
-  ML_HOME="$POLYML_HOME/$ML_PLATFORM"
-  ML_OPTIONS="-H 1000 --gcthreads 8"
-
-ISABELLE_GHC=ghc
+ML_PLATFORM="$ISABELLE_PLATFORM32"
+ML_HOME="$POLYML_HOME/$ML_PLATFORM"
+ML_OPTIONS="-H 1000 --gcthreads 8"
 
 ISABELLE_HOME_USER=~/isabelle-mac-poly-M8-skip_proofs
 
@@ -27,3 +25,11 @@
 ISABELLE_BROWSER_INFO="$ISABELLE_HOME_USER/browser_info"
 
 ISABELLE_BUILD_OPTIONS="threads=8 skip_proofs"
+
+ISABELLE_GHC=ghc
+ISABELLE_MLTON=mlton
+ISABELLE_OCAML=ocaml
+ISABELLE_OCAMLC=ocamlc
+ISABELLE_POLYML="$ML_HOME/poly"
+#ISABELLE_SCALA="$SCALA_HOME/bin"
+ISABELLE_SMLNJ="/mnt/nfsbroy/home/smlnj/bin/sml"
--- a/Admin/isatest/settings/mac-poly64-M2	Mon Feb 29 11:42:15 2016 +0000
+++ b/Admin/isatest/settings/mac-poly64-M2	Mon Feb 29 15:13:11 2016 +0000
@@ -1,12 +1,12 @@
 # -*- shell-script -*- :mode=shellscript:
 
 init_components /home/isabelle/contrib "$HOME/admin/components/main"
+init_components /home/isabelle/contrib "$HOME/admin/components/optional"
+init_components /home/isabelle/contrib "$HOME/admin/components/nonfree"
 
-  POLYML_HOME="/home/polyml/polyml-5.5.0"
-  ML_SYSTEM="polyml-5.5.0"
-  ML_PLATFORM="x86_64-darwin"
-  ML_HOME="$POLYML_HOME/$ML_PLATFORM"
-  ML_OPTIONS="-H 1000"
+ML_PLATFORM="$ISABELLE_PLATFORM64"
+ML_HOME="$POLYML_HOME/$ML_PLATFORM"
+ML_OPTIONS="-H 2000 --gcthreads 2"
 
 ISABELLE_GHC=ghc
 
@@ -27,4 +27,3 @@
 ISABELLE_BROWSER_INFO="$ISABELLE_HOME_USER/browser_info"
 
 ISABELLE_BUILD_OPTIONS="browser_info=false document=false threads=2 parallel_proofs=2"
-
--- a/Admin/isatest/settings/mac-poly64-M4	Mon Feb 29 11:42:15 2016 +0000
+++ b/Admin/isatest/settings/mac-poly64-M4	Mon Feb 29 15:13:11 2016 +0000
@@ -1,13 +1,13 @@
 # -*- shell-script -*- :mode=shellscript:
 
 init_components /home/isabelle/contrib "$HOME/admin/components/main"
+init_components /home/isabelle/contrib "$HOME/admin/components/optional"
+init_components /home/isabelle/contrib "$HOME/admin/components/nonfree"
 
 ML_PLATFORM="$ISABELLE_PLATFORM64"
 ML_HOME="$POLYML_HOME/$ML_PLATFORM"
 ML_OPTIONS="-H 2000 --gcthreads 4"
 
-ISABELLE_GHC=ghc
-
 ISABELLE_HOME_USER=~/isabelle-mac-poly64-M4
 
 # Where to look for isabelle tools (multiple dirs separated by ':').
@@ -26,3 +26,10 @@
 
 ISABELLE_BUILD_OPTIONS="browser_info=false document=false threads=4 parallel_proofs=2"
 
+ISABELLE_GHC=ghc
+ISABELLE_MLTON=mlton
+ISABELLE_OCAML=ocaml
+ISABELLE_OCAMLC=ocamlc
+ISABELLE_POLYML="$ML_HOME/poly"
+#ISABELLE_SCALA="$SCALA_HOME/bin"
+ISABELLE_SMLNJ="/mnt/nfsbroy/home/smlnj/bin/sml"
--- a/Admin/isatest/settings/mac-poly64-M8	Mon Feb 29 11:42:15 2016 +0000
+++ b/Admin/isatest/settings/mac-poly64-M8	Mon Feb 29 15:13:11 2016 +0000
@@ -1,13 +1,13 @@
 # -*- shell-script -*- :mode=shellscript:
 
 init_components /home/isabelle/contrib "$HOME/admin/components/main"
+init_components /home/isabelle/contrib "$HOME/admin/components/optional"
+init_components /home/isabelle/contrib "$HOME/admin/components/nonfree"
 
 ML_PLATFORM="$ISABELLE_PLATFORM64"
 ML_HOME="$POLYML_HOME/$ML_PLATFORM"
 ML_OPTIONS="-H 2000 --gcthreads 8"
 
-ISABELLE_GHC=ghc
-
 ISABELLE_HOME_USER=~/isabelle-mac-poly64-M8
 
 # Where to look for isabelle tools (multiple dirs separated by ':').
@@ -26,3 +26,10 @@
 
 ISABELLE_BUILD_OPTIONS="browser_info=false document=false threads=8 parallel_proofs=2"
 
+ISABELLE_GHC=ghc
+ISABELLE_MLTON=mlton
+ISABELLE_OCAML=ocaml
+ISABELLE_OCAMLC=ocamlc
+ISABELLE_POLYML="$ML_HOME/poly"
+#ISABELLE_SCALA="$SCALA_HOME/bin"
+ISABELLE_SMLNJ="/mnt/nfsbroy/home/smlnj/bin/sml"
--- a/Admin/lib/Tools/build_doc	Mon Feb 29 11:42:15 2016 +0000
+++ b/Admin/lib/Tools/build_doc	Mon Feb 29 15:13:11 2016 +0000
@@ -4,7 +4,8 @@
 #
 # DESCRIPTION: build Isabelle documentation
 
-## settings
+isabelle_admin_build jars || exit $?
+
 
 case "$ISABELLE_JAVA_PLATFORM" in
   x86-*)
@@ -15,75 +16,6 @@
     ;;
 esac
 
-
-## diagnostics
-
-PRG="$(basename "$0")"
-
-function usage()
-{
-  echo
-  echo "Usage: isabelle $PRG [OPTIONS] [DOCS ...]"
-  echo
-  echo "  Options are:"
-  echo "    -a           select all documentation sessions"
-  echo "    -j INT       maximum number of parallel jobs (default 1)"
-  echo "    -s           system build mode"
-  echo
-  echo "  Build Isabelle documentation from documentation sessions with"
-  echo "  suitable document_variants entry."
-  echo
-  exit 1
-}
-
-function fail()
-{
-  echo "$1" >&2
-  exit 2
-}
-
-function check_number()
-{
-  [ -n "$1" -a -z "$(echo "$1" | tr -d '[0-9]')" ] || fail "Bad number: \"$1\""
-}
-
-
-## process command line
-
-ALL_DOCS="false"
-MAX_JOBS="1"
-SYSTEM_MODE="false"
-
-while getopts "aj:s" OPT
-do
-  case "$OPT" in
-    a)
-      ALL_DOCS="true"
-      ;;
-    j)
-      check_number "$OPTARG"
-      MAX_JOBS="$OPTARG"
-      ;;
-    s)
-      SYSTEM_MODE="true"
-      ;;
-    \?)
-      usage
-      ;;
-  esac
-done
-
-shift $(($OPTIND - 1))
-
-[ "$ALL_DOCS" = false -a "$#" -eq 0 ] && usage
-
-
-## main
-
-isabelle_admin_build jars || exit $?
-
 declare -a JAVA_ARGS; eval "JAVA_ARGS=($ISABELLE_BUILD_JAVA_OPTIONS)"
 
-"$ISABELLE_TOOL" java "${JAVA_ARGS[@]}" isabelle.Build_Doc \
-  "$ALL_DOCS" "$MAX_JOBS" "$SYSTEM_MODE" "$@"
-
+"$ISABELLE_TOOL" java "${JAVA_ARGS[@]}" isabelle.Build_Doc "$@"
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/Admin/lib/Tools/check_sources	Mon Feb 29 15:13:11 2016 +0000
@@ -0,0 +1,9 @@
+#!/usr/bin/env bash
+#
+# Author: Makarius
+#
+# DESCRIPTION: some sanity checks for Isabelle sources
+
+isabelle_admin_build jars || exit $?
+
+"$ISABELLE_TOOL" java isabelle.Check_Sources "$@"
--- a/NEWS	Mon Feb 29 11:42:15 2016 +0000
+++ b/NEWS	Mon Feb 29 15:13:11 2016 +0000
@@ -7,6 +7,14 @@
 New in this Isabelle version
 ----------------------------
 
+*** General ***
+
+* New symbol \<circle>, e.g. for temporal operator.
+
+* Old 'header' command is no longer supported (legacy since
+Isabelle2015).
+
+
 *** Isar ***
 
 * Command '\<proof>' is an alias for 'sorry', with different
@@ -35,6 +43,23 @@
 * Renamed split_if -> if_split and split_if_asm -> if_split_asm to
 resemble the f.split naming convention, INCOMPATIBILITY.
 
+* Multiset membership is now expressed using set_mset rather than count.
+ASCII infix syntax ":#" has been discontinued.
+
+  - Expressions "count M a > 0" and similar simplify to membership
+    by default.
+
+  - Converting between "count M a = 0" and non-membership happens using
+    equations count_eq_zero_iff and not_in_iff.
+
+  - Rules count_inI and in_countE obtain facts of the form
+    "count M a = n" from membership.
+
+  - Rules count_in_diffI and in_diff_countE obtain facts of the form
+    "count M a = n + count N a" from membership on difference sets.
+
+INCOMPATIBILITY.
+
 * Compound constants INFIMUM and SUPREMUM are mere abbreviations now.
 INCOMPATIBILITY.
 
@@ -160,6 +185,10 @@
 executables are found within the PATH: isabelle, isabelle_process,
 isabelle_scala_script.
 
+* The somewhat pointless command-line tool "isabelle yxml" has been
+discontinued. INCOMPATIBILITY, use operations from the modules "XML" and
+"YXML" in Isabelle/ML or Isabelle/Scala.
+
 * SML/NJ is no longer supported.
 
 
--- a/etc/symbols	Mon Feb 29 11:42:15 2016 +0000
+++ b/etc/symbols	Mon Feb 29 15:13:11 2016 +0000
@@ -220,6 +220,7 @@
 \<exists>               code: 0x002203  group: logic  abbrev: ?  abbrev: EX
 \<nexists>              code: 0x002204  group: logic  abbrev: ~?
 \<not>                  code: 0x0000ac  group: logic  abbrev: ~
+\<circle>               code: 0x0025cb  group: logic
 \<box>                  code: 0x0025a1  group: logic
 \<diamond>              code: 0x0025c7  group: logic
 \<diamondop>            code: 0x0022c4  group: operator
--- a/lib/Tools/doc	Mon Feb 29 11:42:15 2016 +0000
+++ b/lib/Tools/doc	Mon Feb 29 15:13:11 2016 +0000
@@ -4,34 +4,6 @@
 #
 # DESCRIPTION: view Isabelle documentation
 
-
-PRG="$(basename "$0")"
-
-function usage()
-{
-  echo
-  echo "Usage: isabelle $PRG [DOC ...]"
-  echo
-  echo "  View Isabelle documentation."
-  echo
-  exit 1
-}
-
-function fail()
-{
-  echo "$1" >&2
-  exit 2
-}
-
-
-## args
-
-[ "$#" -eq 1 -a "$1" = "-?" ] && usage
-
-
-## main
-
 isabelle_admin_build jars || exit $?
 
 "$ISABELLE_TOOL" java isabelle.Doc "$@"
-
--- a/lib/Tools/options	Mon Feb 29 11:42:15 2016 +0000
+++ b/lib/Tools/options	Mon Feb 29 15:13:11 2016 +0000
@@ -4,72 +4,6 @@
 #
 # DESCRIPTION: print Isabelle system options
 
-
-## diagnostics
-
-PRG="$(basename "$0")"
-
-function usage()
-{
-  echo
-  echo "Usage: isabelle $PRG [OPTIONS] [MORE_OPTIONS ...]"
-  echo
-  echo "  Options are:"
-  echo "    -b           include \$ISABELLE_BUILD_OPTIONS"
-  echo "    -g OPTION    get value of OPTION"
-  echo "    -l           list options"
-  echo "    -x FILE      export options to FILE in YXML format"
-  echo
-  echo "  Report Isabelle system options, augmented by MORE_OPTIONS given as"
-  echo "  arguments NAME=VAL or NAME."
-  echo
-  exit 1
-}
-
-function fail()
-{
-  echo "$1" >&2
-  exit 2
-}
-
-
-## process command line
-
-declare -a BUILD_OPTIONS=()
-GET_OPTION=""
-LIST_OPTIONS="false"
-EXPORT_FILE=""
-
-while getopts "bg:lx:" OPT
-do
-  case "$OPT" in
-    b)
-      eval "BUILD_OPTIONS=($ISABELLE_BUILD_OPTIONS)"
-      ;;
-    g)
-      GET_OPTION="$OPTARG"
-      ;;
-    l)
-      LIST_OPTIONS="true"
-      ;;
-    x)
-      EXPORT_FILE="$OPTARG"
-      ;;
-    \?)
-      usage
-      ;;
-  esac
-done
-
-shift $(($OPTIND - 1))
-
-[ -z "$GET_OPTION" -a "$LIST_OPTIONS" = "false" -a -z "$EXPORT_FILE" ] && usage
-
-
-## main
-
 isabelle_admin_build jars || exit $?
 
-exec "$ISABELLE_TOOL" java isabelle.Options \
-  "$GET_OPTION" "$EXPORT_FILE" "${BUILD_OPTIONS[@]}" "$@"
-
+exec "$ISABELLE_TOOL" java isabelle.Options "$@"
--- a/lib/Tools/update_cartouches	Mon Feb 29 11:42:15 2016 +0000
+++ b/lib/Tools/update_cartouches	Mon Feb 29 15:13:11 2016 +0000
@@ -4,62 +4,6 @@
 #
 # DESCRIPTION: update theory syntax to use cartouches
 
-
-## diagnostics
-
-PRG="$(basename "$0")"
-
-function usage()
-{
-  echo
-  echo "Usage: isabelle $PRG [FILES|DIRS...]"
-  echo
-  echo "  Options are:"
-  echo "    -c           replace comment marker \"--\" by symbol \"\\<comment>\""
-  echo "    -t           replace @{text} antiquotations within text tokens"
-  echo
-  echo "  Recursively find .thy files and update theory syntax to use cartouches"
-  echo "  instead of old-style {* verbatim *} or \`alt_string\` tokens."
-  echo
-  echo "  Old versions of files are preserved by appending \"~~\"."
-  echo
-  exit 1
-}
-
-
-## process command line
-
-# options
-
-COMMENT="false"
-TEXT="false"
+isabelle_admin_build jars || exit $?
 
-while getopts "ct" OPT
-do
-  case "$OPT" in
-    c)
-      COMMENT="true"
-      ;;
-    t)
-      TEXT="true"
-      ;;
-    \?)
-      usage
-      ;;
-  esac
-done
-
-shift $(($OPTIND - 1))
-
-
-# args
-
-[ "$#" -eq 0 -o "$1" = "-?" ] && usage
-
-SPECS="$@"; shift "$#"
-
-
-## main
-
-find $SPECS -name \*.thy -print0 | \
-  xargs -0 "$ISABELLE_TOOL" java isabelle.Update_Cartouches "$COMMENT" "$TEXT"
+"$ISABELLE_TOOL" java isabelle.Update_Cartouches "$@"
--- a/lib/Tools/update_header	Mon Feb 29 11:42:15 2016 +0000
+++ b/lib/Tools/update_header	Mon Feb 29 15:13:11 2016 +0000
@@ -4,57 +4,6 @@
 #
 # DESCRIPTION: replace obsolete theory header command
 
-
-## diagnostics
-
-PRG="$(basename "$0")"
-
-function usage()
-{
-  echo
-  echo "Usage: isabelle $PRG [FILES|DIRS...]"
-  echo
-  echo "  Options are:"
-  echo "    -s COMMAND   alternative heading command (default 'section')"
-  echo
-  echo "  Recursively find .thy files and replace obsolete theory header commands"
-  echo "  by 'section' (default), or 'chapter', 'subsection', 'subsubsection'."
-  echo
-  echo "  Old versions of files are preserved by appending \"~~\"."
-  echo
-  exit 1
-}
-
-
-## process command line
-
-#options
+isabelle_admin_build jars || exit $?
 
-SECTION="section"
-
-while getopts "s:" OPT
-do
-  case "$OPT" in
-    s)
-      SECTION="$OPTARG"
-      ;;
-    \?)
-      usage
-      ;;
-  esac
-done
-
-shift $(($OPTIND - 1))
-
-
-# args
-
-[ "$#" -eq 0 -o "$1" = "-?" ] && usage
-
-SPECS="$@"; shift "$#"
-
-
-## main
-
-find $SPECS -name \*.thy -print0 | \
-  xargs -0 "$ISABELLE_TOOL" java isabelle.Update_Header "$SECTION"
+"$ISABELLE_TOOL" java isabelle.Update_Header "$@"
--- a/lib/Tools/update_semicolons	Mon Feb 29 11:42:15 2016 +0000
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,35 +0,0 @@
-#!/usr/bin/env bash
-#
-# Author: Makarius
-#
-# DESCRIPTION: remove obsolete semicolons from theory sources
-
-
-## diagnostics
-
-PRG="$(basename "$0")"
-
-function usage()
-{
-  echo
-  echo "Usage: isabelle $PRG [FILES|DIRS...]"
-  echo
-  echo "  Recursively find .thy files and remove obsolete semicolons."
-  echo
-  echo "  Old versions of files are preserved by appending \"~~\"."
-  echo
-  exit 1
-}
-
-
-## process command line
-
-[ "$#" -eq 0 -o "$1" = "-?" ] && usage
-
-SPECS="$@"; shift "$#"
-
-
-## main
-
-find $SPECS -name \*.thy -print0 | \
-  xargs -0 "$ISABELLE_TOOL" java isabelle.Update_Semicolons
--- a/lib/Tools/update_sub_sup	Mon Feb 29 11:42:15 2016 +0000
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,36 +0,0 @@
-#!/usr/bin/env bash
-#
-# Author: Makarius
-#
-# DESCRIPTION: update Isabelle symbols involving sub/superscripts
-
-
-## diagnostics
-
-PRG="$(basename "$0")"
-
-function usage()
-{
-  echo
-  echo "Usage: isabelle $PRG [FILES|DIRS...]"
-  echo
-  echo "  Recursively find .thy/.ML files and update Isabelle symbols involving"
-  echo "  sub- and superscript."
-  echo
-  echo "  Old versions of files are preserved by appending \"~~\"."
-  echo
-  exit 1
-}
-
-
-## process command line
-
-[ "$#" -eq 0 -o "$1" = "-?" ] && usage
-
-SPECS="$@"; shift "$#"
-
-
-## main
-
-find $SPECS \( -name \*.ML -o -name \*.thy \) -print0 | \
-  xargs -0 "$ISABELLE_HOME/lib/scripts/update_sub_sup"
--- a/lib/Tools/update_then	Mon Feb 29 11:42:15 2016 +0000
+++ b/lib/Tools/update_then	Mon Feb 29 15:13:11 2016 +0000
@@ -4,35 +4,6 @@
 #
 # DESCRIPTION: expand old Isar command conflations 'hence' and 'thus'
 
-
-## diagnostics
-
-PRG="$(basename "$0")"
+isabelle_admin_build jars || exit $?
 
-function usage()
-{
-  echo
-  echo "Usage: isabelle $PRG [FILES|DIRS...]"
-  echo
-  echo "  Recursively find .thy files and expand old Isar command conflations:"
-  echo
-  echo "    hence  ~>  then have"
-  echo "    thus   ~>  then show"
-  echo
-  echo "  Old versions of files are preserved by appending \"~~\"."
-  echo
-  exit 1
-}
-
-
-## process command line
-
-[ "$#" -eq 0 -o "$1" = "-?" ] && usage
-
-SPECS="$@"; shift "$#"
-
-
-## main
-
-find $SPECS -name \*.thy -print0 | \
-  xargs -0 "$ISABELLE_TOOL" java isabelle.Update_Then
+"$ISABELLE_TOOL" java isabelle.Update_Then "$@"
--- a/lib/Tools/update_theorems	Mon Feb 29 11:42:15 2016 +0000
+++ b/lib/Tools/update_theorems	Mon Feb 29 15:13:11 2016 +0000
@@ -4,37 +4,6 @@
 #
 # DESCRIPTION: update toplevel theorem keywords
 
-
-## diagnostics
-
-PRG="$(basename "$0")"
+isabelle_admin_build jars || exit $?
 
-function usage()
-{
-  echo
-  echo "Usage: isabelle $PRG [FILES|DIRS...]"
-  echo
-  echo "  Recursively find .thy files and update toplevel theorem keywords:"
-  echo
-  echo "    theorems             ~>  lemmas"
-  echo "    schematic_theorem    ~>  schematic_goal"
-  echo "    schematic_lemma      ~>  schematic_goal"
-  echo "    schematic_corollary  ~>  schematic_goal"
-  echo
-  echo "  Old versions of files are preserved by appending \"~~\"."
-  echo
-  exit 1
-}
-
-
-## process command line
-
-[ "$#" -eq 0 -o "$1" = "-?" ] && usage
-
-SPECS="$@"; shift "$#"
-
-
-## main
-
-find $SPECS -name \*.thy -print0 | \
-  xargs -0 "$ISABELLE_TOOL" java isabelle.Update_Theorems
+"$ISABELLE_TOOL" java isabelle.Update_Theorems "$@"
--- a/lib/Tools/yxml	Mon Feb 29 11:42:15 2016 +0000
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,34 +0,0 @@
-#!/usr/bin/env bash
-#
-# Author: Makarius
-#
-# DESCRIPTION: simple XML to YXML converter
-
-
-PRG="$(basename "$0")"
-
-function usage()
-{
-  echo
-  echo "Usage: isabelle $PRG"
-  echo
-  echo "  Convert XML (stdin) to YXML (stdout)."
-  echo
-  exit 1
-}
-
-function fail()
-{
-  echo "$1" >&2
-  exit 2
-}
-
-
-## process command line
-
-[ "$#" -ne 0 ] && usage
-
-
-## main
-
-exec "$ISABELLE_HOME/lib/scripts/yxml"
--- a/lib/fonts/IsabelleText.sfd	Mon Feb 29 11:42:15 2016 +0000
+++ b/lib/fonts/IsabelleText.sfd	Mon Feb 29 15:13:11 2016 +0000
@@ -19,7 +19,7 @@
 OS2_WeightWidthSlopeOnly: 0
 OS2_UseTypoMetrics: 1
 CreationTime: 1050361371
-ModificationTime: 1451762222
+ModificationTime: 1456601690
 PfmFamily: 17
 TTFWeight: 400
 TTFWidth: 5
@@ -2241,11 +2241,11 @@
 DisplaySize: -96
 AntiAlias: 1
 FitToEm: 1
-WinInfo: 8604 18 16
+WinInfo: 9504 18 16
 BeginPrivate: 0
 EndPrivate
 TeXData: 1 0 0 631296 315648 210432 572416 -1048576 210432 783286 444596 497025 792723 393216 433062 380633 303038 157286 324010 404750 52429 2506097 1059062 262144
-BeginChars: 1114189 1403
+BeginChars: 1114189 1404
 
 StartChar: u10000
 Encoding: 65536 65536 0
@@ -16965,16 +16965,16 @@
 LayerCount: 2
 Fore
 SplineSet
-319 1870 m 5
- 522 1870 l 5
- 522 1667 l 5
- 319 1667 l 5
- 319 1870 l 5
-711 1870 m 5
- 913 1870 l 5
- 913 1667 l 5
- 711 1667 l 5
- 711 1870 l 5
+319 1870 m 5,0,-1
+ 522 1870 l 5,1,-1
+ 522 1667 l 5,2,-1
+ 319 1667 l 5,3,-1
+ 319 1870 l 5,0,-1
+711 1870 m 5,4,-1
+ 913 1870 l 5,5,-1
+ 913 1667 l 5,6,-1
+ 711 1667 l 5,7,-1
+ 711 1870 l 5,4,-1
 EndSplineSet
 Refer: 60 89 N 1 0 0 1 0 0 2
 EndChar
@@ -18945,14 +18945,14 @@
 LayerCount: 2
 Fore
 SplineSet
-522 1635 m 5
- 311 1901 l 5
- 451 1901 l 5
- 616 1723 l 5
- 782 1901 l 5
- 922 1901 l 5
- 711 1635 l 5
- 522 1635 l 5
+522 1635 m 5,0,-1
+ 311 1901 l 5,1,-1
+ 451 1901 l 5,2,-1
+ 616 1723 l 5,3,-1
+ 782 1901 l 5,4,-1
+ 922 1901 l 5,5,-1
+ 711 1635 l 5,6,-1
+ 522 1635 l 5,0,-1
 EndSplineSet
 Refer: 54 83 N 1 0 0 1 0 0 2
 EndChar
@@ -18974,14 +18974,14 @@
 LayerCount: 2
 Fore
 SplineSet
-522 1635 m 5
- 311 1901 l 5
- 451 1901 l 5
- 616 1723 l 5
- 782 1901 l 5
- 922 1901 l 5
- 711 1635 l 5
- 522 1635 l 5
+522 1635 m 5,0,-1
+ 311 1901 l 5,1,-1
+ 451 1901 l 5,2,-1
+ 616 1723 l 5,3,-1
+ 782 1901 l 5,4,-1
+ 922 1901 l 5,5,-1
+ 711 1635 l 5,6,-1
+ 522 1635 l 5,0,-1
 EndSplineSet
 Refer: 61 90 N 1 0 0 1 0 0 2
 EndChar
@@ -19948,17 +19948,17 @@
 LayerCount: 2
 Fore
 SplineSet
-353 1901 m 5
- 472 1901 l 5
- 484 1847 484 1847 534 1818.5 c 4
- 584 1790 584 1790 666 1790 c 4
- 749 1790 749 1790 797.5 1817.5 c 4
- 846 1845 846 1845 861 1901 c 5
- 980 1901 l 5
- 969 1782 969 1782 889.5 1720.5 c 4
- 810 1659 810 1659 666 1659 c 260
- 522 1659 522 1659 443 1720 c 4
- 364 1781 364 1781 353 1901 c 5
+353 1901 m 5,0,-1
+ 472 1901 l 5,1,2
+ 484 1847 484 1847 534 1818.5 c 4,3,4
+ 584 1790 584 1790 666 1790 c 4,5,6
+ 749 1790 749 1790 797.5 1817.5 c 4,7,8
+ 846 1845 846 1845 861 1901 c 5,9,-1
+ 980 1901 l 5,10,11
+ 969 1782 969 1782 889.5 1720.5 c 4,12,13
+ 810 1659 810 1659 666 1659 c 260,14,15
+ 522 1659 522 1659 443 1720 c 4,16,17
+ 364 1781 364 1781 353 1901 c 5,0,-1
 EndSplineSet
 Refer: 42 71 N 1 0 0 1 0 0 2
 EndChar
@@ -19970,17 +19970,17 @@
 LayerCount: 2
 Fore
 SplineSet
-303 1608 m 5
- 422 1608 l 5
- 433 1532 433 1532 481 1495 c 4
- 529 1458 529 1458 616 1458 c 4
- 701 1458 701 1458 749 1495 c 4
- 797 1532 797 1532 811 1608 c 5
- 930 1608 l 5
- 919 1465 919 1465 840 1393 c 4
- 761 1321 761 1321 616 1321 c 4
- 472 1321 472 1321 393 1393 c 4
- 314 1465 314 1465 303 1608 c 5
+303 1608 m 5,0,-1
+ 422 1608 l 5,1,2
+ 433 1532 433 1532 481 1495 c 4,3,4
+ 529 1458 529 1458 616 1458 c 4,5,6
+ 701 1458 701 1458 749 1495 c 4,7,8
+ 797 1532 797 1532 811 1608 c 5,9,-1
+ 930 1608 l 5,10,11
+ 919 1465 919 1465 840 1393 c 4,12,13
+ 761 1321 761 1321 616 1321 c 4,14,15
+ 472 1321 472 1321 393 1393 c 4,16,17
+ 314 1465 314 1465 303 1608 c 5,0,-1
 EndSplineSet
 Refer: 74 103 N 1 0 0 1 0 0 2
 EndChar
@@ -19992,11 +19992,11 @@
 LayerCount: 2
 Fore
 SplineSet
-513 1872 m 5
- 718 1872 l 5
- 718 1667 l 5
- 513 1667 l 5
- 513 1872 l 5
+513 1872 m 5,0,-1
+ 718 1872 l 5,1,-1
+ 718 1667 l 5,2,-1
+ 513 1667 l 5,3,-1
+ 513 1872 l 5,0,-1
 EndSplineSet
 Refer: 44 73 N 1 0 0 1 0 0 2
 EndChar
@@ -20008,21 +20008,21 @@
 LayerCount: 2
 Fore
 SplineSet
-700 0 m 5
- 756 -62 756 -62 782.5 -114.5 c 4
- 809 -167 809 -167 809 -215 c 4
- 809 -304 809 -304 749 -349.5 c 4
- 689 -395 689 -395 571 -395 c 4
- 526 -395 526 -395 482.5 -389 c 4
- 439 -383 439 -383 395 -371 c 5
- 395 -240 l 5
- 429 -257 429 -257 466.5 -264.5 c 4
- 504 -272 504 -272 551 -272 c 4
- 609 -272 609 -272 639.5 -248 c 4
- 670 -224 670 -224 670 -178 c 4
- 670 -148 670 -148 648 -104.5 c 4
- 626 -61 626 -61 582 0 c 5
- 700 0 l 5
+700 0 m 5,0,1
+ 756 -62 756 -62 782.5 -114.5 c 4,2,3
+ 809 -167 809 -167 809 -215 c 4,4,5
+ 809 -304 809 -304 749 -349.5 c 4,6,7
+ 689 -395 689 -395 571 -395 c 4,8,9
+ 526 -395 526 -395 482.5 -389 c 4,10,11
+ 439 -383 439 -383 395 -371 c 5,12,-1
+ 395 -240 l 5,13,14
+ 429 -257 429 -257 466.5 -264.5 c 4,15,16
+ 504 -272 504 -272 551 -272 c 4,17,18
+ 609 -272 609 -272 639.5 -248 c 4,19,20
+ 670 -224 670 -224 670 -178 c 4,21,22
+ 670 -148 670 -148 648 -104.5 c 4,23,24
+ 626 -61 626 -61 582 0 c 5,25,-1
+ 700 0 l 5,0,1
 EndSplineSet
 Refer: 54 83 N 1 0 0 1 0 0 2
 EndChar
@@ -20034,21 +20034,21 @@
 LayerCount: 2
 Fore
 SplineSet
-700 0 m 5
- 756 -62 756 -62 782.5 -114.5 c 4
- 809 -167 809 -167 809 -215 c 4
- 809 -304 809 -304 749 -349.5 c 4
- 689 -395 689 -395 571 -395 c 4
- 526 -395 526 -395 482.5 -389 c 4
- 439 -383 439 -383 395 -371 c 5
- 395 -240 l 5
- 429 -257 429 -257 466.5 -264.5 c 4
- 504 -272 504 -272 551 -272 c 4
- 609 -272 609 -272 639.5 -248 c 4
- 670 -224 670 -224 670 -178 c 4
- 670 -148 670 -148 648 -104.5 c 4
- 626 -61 626 -61 582 0 c 5
- 700 0 l 5
+700 0 m 5,0,1
+ 756 -62 756 -62 782.5 -114.5 c 4,2,3
+ 809 -167 809 -167 809 -215 c 4,4,5
+ 809 -304 809 -304 749 -349.5 c 4,6,7
+ 689 -395 689 -395 571 -395 c 4,8,9
+ 526 -395 526 -395 482.5 -389 c 4,10,11
+ 439 -383 439 -383 395 -371 c 5,12,-1
+ 395 -240 l 5,13,14
+ 429 -257 429 -257 466.5 -264.5 c 4,15,16
+ 504 -272 504 -272 551 -272 c 4,17,18
+ 609 -272 609 -272 639.5 -248 c 4,19,20
+ 670 -224 670 -224 670 -178 c 4,21,22
+ 670 -148 670 -148 648 -104.5 c 4,23,24
+ 626 -61 626 -61 582 0 c 5,25,-1
+ 700 0 l 5,0,1
 EndSplineSet
 Refer: 86 115 N 1 0 0 1 0 0 2
 EndChar
@@ -20060,11 +20060,11 @@
 LayerCount: 2
 Fore
 SplineSet
-762 1899 m 5
- 948 1899 l 5
- 719 1635 l 5
- 565 1635 l 5
- 762 1899 l 5
+762 1899 m 5,0,-1
+ 948 1899 l 5,1,-1
+ 719 1635 l 5,2,-1
+ 565 1635 l 5,3,-1
+ 762 1899 l 5,0,-1
 EndSplineSet
 Refer: 38 67 N 1 0 0 1 0 0 2
 EndChar
@@ -20086,14 +20086,14 @@
 LayerCount: 2
 Fore
 SplineSet
-612 1635 m 5
- 401 1901 l 5
- 541 1901 l 5
- 706 1723 l 5
- 872 1901 l 5
- 1012 1901 l 5
- 801 1635 l 5
- 612 1635 l 5
+612 1635 m 5,0,-1
+ 401 1901 l 5,1,-1
+ 541 1901 l 5,2,-1
+ 706 1723 l 5,3,-1
+ 872 1901 l 5,4,-1
+ 1012 1901 l 5,5,-1
+ 801 1635 l 5,6,-1
+ 612 1635 l 5,0,-1
 EndSplineSet
 Refer: 38 67 N 1 0 0 1 0 0 2
 EndChar
@@ -45065,11 +45065,11 @@
 LayerCount: 2
 Fore
 SplineSet
-561 1899 m 5
- 758 1635 l 5
- 604 1635 l 5
- 377 1899 l 5
- 561 1899 l 5
+561 1899 m 5,0,-1
+ 758 1635 l 5,1,-1
+ 604 1635 l 5,2,-1
+ 377 1899 l 5,3,-1
+ 561 1899 l 5,0,-1
 EndSplineSet
 Refer: 669 1045 N 1 0 0 1 0 0 2
 Validated: 1
@@ -45082,16 +45082,16 @@
 LayerCount: 2
 Fore
 SplineSet
-375 1870 m 5
- 578 1870 l 5
- 578 1667 l 5
- 375 1667 l 5
- 375 1870 l 5
-767 1870 m 5
- 969 1870 l 5
- 969 1667 l 5
- 767 1667 l 5
- 767 1870 l 5
+375 1870 m 5,0,-1
+ 578 1870 l 5,1,-1
+ 578 1667 l 5,2,-1
+ 375 1667 l 5,3,-1
+ 375 1870 l 5,0,-1
+767 1870 m 5,4,-1
+ 969 1870 l 5,5,-1
+ 969 1667 l 5,6,-1
+ 767 1667 l 5,7,-1
+ 767 1870 l 5,4,-1
 EndSplineSet
 Refer: 669 1045 N 1 0 0 1 0 0 2
 Validated: 1
@@ -45147,11 +45147,11 @@
 LayerCount: 2
 Fore
 SplineSet
-744 1899 m 5
- 930 1899 l 5
- 701 1635 l 5
- 547 1635 l 5
- 744 1899 l 5
+744 1899 m 5,0,-1
+ 930 1899 l 5,1,-1
+ 701 1635 l 5,2,-1
+ 547 1635 l 5,3,-1
+ 744 1899 l 5,0,-1
 EndSplineSet
 Refer: 667 1043 N 1 0 0 1 0 0 2
 Validated: 1
@@ -45213,16 +45213,16 @@
 LayerCount: 2
 Fore
 SplineSet
-319 1870 m 5
- 522 1870 l 5
- 522 1667 l 5
- 319 1667 l 5
- 319 1870 l 5
-711 1870 m 5
- 913 1870 l 5
- 913 1667 l 5
- 711 1667 l 5
- 711 1870 l 5
+319 1870 m 5,0,-1
+ 522 1870 l 5,1,-1
+ 522 1667 l 5,2,-1
+ 319 1667 l 5,3,-1
+ 319 1870 l 5,0,-1
+711 1870 m 5,4,-1
+ 913 1870 l 5,5,-1
+ 913 1667 l 5,6,-1
+ 711 1667 l 5,7,-1
+ 711 1870 l 5,4,-1
 EndSplineSet
 Refer: 654 1030 N 1 0 0 1 0 0 2
 Validated: 1
@@ -45357,11 +45357,11 @@
 LayerCount: 2
 Fore
 SplineSet
-699 1899 m 5
- 885 1899 l 5
- 656 1635 l 5
- 502 1635 l 5
- 699 1899 l 5
+699 1899 m 5,0,-1
+ 885 1899 l 5,1,-1
+ 656 1635 l 5,2,-1
+ 502 1635 l 5,3,-1
+ 699 1899 l 5,0,-1
 EndSplineSet
 Refer: 674 1050 N 1 0 0 1 0 0 2
 Validated: 1
@@ -45374,11 +45374,11 @@
 LayerCount: 2
 Fore
 SplineSet
-561 1899 m 5
- 758 1635 l 5
- 604 1635 l 5
- 377 1899 l 5
- 561 1899 l 5
+561 1899 m 5,0,-1
+ 758 1635 l 5,1,-1
+ 604 1635 l 5,2,-1
+ 377 1899 l 5,3,-1
+ 561 1899 l 5,0,-1
 EndSplineSet
 Refer: 672 1048 N 1 0 0 1 0 0 2
 Validated: 1
@@ -45391,17 +45391,17 @@
 LayerCount: 2
 Fore
 SplineSet
-303 1901 m 5
- 422 1901 l 5
- 434 1847 434 1847 484 1818.5 c 4
- 534 1790 534 1790 616 1790 c 4
- 699 1790 699 1790 747.5 1817.5 c 4
- 796 1845 796 1845 811 1901 c 5
- 930 1901 l 5
- 919 1782 919 1782 839.5 1720.5 c 4
- 760 1659 760 1659 616 1659 c 260
- 472 1659 472 1659 393 1720 c 4
- 314 1781 314 1781 303 1901 c 5
+303 1901 m 5,0,-1
+ 422 1901 l 5,1,2
+ 434 1847 434 1847 484 1818.5 c 4,3,4
+ 534 1790 534 1790 616 1790 c 4,5,6
+ 699 1790 699 1790 747.5 1817.5 c 4,7,8
+ 796 1845 796 1845 811 1901 c 5,9,-1
+ 930 1901 l 5,10,11
+ 919 1782 919 1782 839.5 1720.5 c 4,12,13
+ 760 1659 760 1659 616 1659 c 260,14,15
+ 472 1659 472 1659 393 1720 c 4,16,17
+ 314 1781 314 1781 303 1901 c 5,0,-1
 EndSplineSet
 Refer: 683 1059 N 1 0 0 1 0 0 2
 Validated: 1
@@ -45616,17 +45616,17 @@
 LayerCount: 2
 Fore
 SplineSet
-303 1901 m 5
- 422 1901 l 5
- 434 1847 434 1847 484 1818.5 c 4
- 534 1790 534 1790 616 1790 c 4
- 699 1790 699 1790 747.5 1817.5 c 4
- 796 1845 796 1845 811 1901 c 5
- 930 1901 l 5
- 919 1782 919 1782 839.5 1720.5 c 4
- 760 1659 760 1659 616 1659 c 260
- 472 1659 472 1659 393 1720 c 4
- 314 1781 314 1781 303 1901 c 5
+303 1901 m 5,0,-1
+ 422 1901 l 5,1,2
+ 434 1847 434 1847 484 1818.5 c 4,3,4
+ 534 1790 534 1790 616 1790 c 4,5,6
+ 699 1790 699 1790 747.5 1817.5 c 4,7,8
+ 796 1845 796 1845 811 1901 c 5,9,-1
+ 930 1901 l 5,10,11
+ 919 1782 919 1782 839.5 1720.5 c 4,12,13
+ 760 1659 760 1659 616 1659 c 260,14,15
+ 472 1659 472 1659 393 1720 c 4,16,17
+ 314 1781 314 1781 303 1901 c 5,0,-1
 EndSplineSet
 Refer: 672 1048 N 1 0 0 1 0 0 2
 Validated: 1
@@ -46371,17 +46371,17 @@
 LayerCount: 2
 Fore
 SplineSet
-303 1608 m 5
- 422 1608 l 5
- 433 1532 433 1532 481 1495 c 4
- 529 1458 529 1458 616 1458 c 4
- 701 1458 701 1458 749 1495 c 4
- 797 1532 797 1532 811 1608 c 5
- 930 1608 l 5
- 919 1465 919 1465 840 1393 c 4
- 761 1321 761 1321 616 1321 c 4
- 472 1321 472 1321 393 1393 c 4
- 314 1465 314 1465 303 1608 c 5
+303 1608 m 5,0,-1
+ 422 1608 l 5,1,2
+ 433 1532 433 1532 481 1495 c 4,3,4
+ 529 1458 529 1458 616 1458 c 4,5,6
+ 701 1458 701 1458 749 1495 c 4,7,8
+ 797 1532 797 1532 811 1608 c 5,9,-1
+ 930 1608 l 5,10,11
+ 919 1465 919 1465 840 1393 c 4,12,13
+ 761 1321 761 1321 616 1321 c 4,14,15
+ 472 1321 472 1321 393 1393 c 4,16,17
+ 314 1465 314 1465 303 1608 c 5,0,-1
 EndSplineSet
 Refer: 704 1080 N 1 0 0 1 0 0 2
 Validated: 1
@@ -47198,17 +47198,17 @@
 LayerCount: 2
 Fore
 SplineSet
-303 1608 m 5
- 422 1608 l 5
- 433 1532 433 1532 481 1495 c 4
- 529 1458 529 1458 616 1458 c 4
- 701 1458 701 1458 749 1495 c 4
- 797 1532 797 1532 811 1608 c 5
- 930 1608 l 5
- 919 1465 919 1465 840 1393 c 4
- 761 1321 761 1321 616 1321 c 4
- 472 1321 472 1321 393 1393 c 4
- 314 1465 314 1465 303 1608 c 5
+303 1608 m 5,0,-1
+ 422 1608 l 5,1,2
+ 433 1532 433 1532 481 1495 c 4,3,4
+ 529 1458 529 1458 616 1458 c 4,5,6
+ 701 1458 701 1458 749 1495 c 4,7,8
+ 797 1532 797 1532 811 1608 c 5,9,-1
+ 930 1608 l 5,10,11
+ 919 1465 919 1465 840 1393 c 4,12,13
+ 761 1321 761 1321 616 1321 c 4,14,15
+ 472 1321 472 1321 393 1393 c 4,16,17
+ 314 1465 314 1465 303 1608 c 5,0,-1
 EndSplineSet
 Refer: 715 1091 N 1 0 0 1 0 0 2
 Validated: 1
@@ -47671,21 +47671,21 @@
 LayerCount: 2
 Fore
 SplineSet
-627 0 m 5
- 683 -62 683 -62 709.5 -114.5 c 4
- 736 -167 736 -167 736 -215 c 4
- 736 -304 736 -304 676 -349.5 c 4
- 616 -395 616 -395 498 -395 c 4
- 453 -395 453 -395 409.5 -389 c 4
- 366 -383 366 -383 322 -371 c 5
- 322 -240 l 5
- 356 -257 356 -257 393.5 -264.5 c 4
- 431 -272 431 -272 478 -272 c 4
- 536 -272 536 -272 566.5 -248 c 4
- 597 -224 597 -224 597 -178 c 4
- 597 -148 597 -148 575 -104.5 c 4
- 553 -61 553 -61 509 0 c 5
- 627 0 l 5
+627 0 m 5,0,1
+ 683 -62 683 -62 709.5 -114.5 c 4,2,3
+ 736 -167 736 -167 736 -215 c 4,4,5
+ 736 -304 736 -304 676 -349.5 c 4,6,7
+ 616 -395 616 -395 498 -395 c 4,8,9
+ 453 -395 453 -395 409.5 -389 c 4,10,11
+ 366 -383 366 -383 322 -371 c 5,12,-1
+ 322 -240 l 5,13,14
+ 356 -257 356 -257 393.5 -264.5 c 4,15,16
+ 431 -272 431 -272 478 -272 c 4,17,18
+ 536 -272 536 -272 566.5 -248 c 4,19,20
+ 597 -224 597 -224 597 -178 c 4,21,22
+ 597 -148 597 -148 575 -104.5 c 4,23,24
+ 553 -61 553 -61 509 0 c 5,25,-1
+ 627 0 l 5,0,1
 EndSplineSet
 Refer: 671 1047 N 1 0 0 1 0 0 2
 Validated: 5
@@ -47698,21 +47698,21 @@
 LayerCount: 2
 Fore
 SplineSet
-633 0 m 5
- 689 -62 689 -62 715.5 -114.5 c 4
- 742 -167 742 -167 742 -215 c 4
- 742 -304 742 -304 682 -349.5 c 4
- 622 -395 622 -395 504 -395 c 4
- 459 -395 459 -395 415.5 -389 c 4
- 372 -383 372 -383 328 -371 c 5
- 328 -240 l 5
- 362 -257 362 -257 399.5 -264.5 c 4
- 437 -272 437 -272 484 -272 c 4
- 542 -272 542 -272 572.5 -248 c 4
- 603 -224 603 -224 603 -178 c 4
- 603 -148 603 -148 581 -104.5 c 4
- 559 -61 559 -61 515 0 c 5
- 633 0 l 5
+633 0 m 5,0,1
+ 689 -62 689 -62 715.5 -114.5 c 4,2,3
+ 742 -167 742 -167 742 -215 c 4,4,5
+ 742 -304 742 -304 682 -349.5 c 4,6,7
+ 622 -395 622 -395 504 -395 c 4,8,9
+ 459 -395 459 -395 415.5 -389 c 4,10,11
+ 372 -383 372 -383 328 -371 c 5,12,-1
+ 328 -240 l 5,13,14
+ 362 -257 362 -257 399.5 -264.5 c 4,15,16
+ 437 -272 437 -272 484 -272 c 4,17,18
+ 542 -272 542 -272 572.5 -248 c 4,19,20
+ 603 -224 603 -224 603 -178 c 4,21,22
+ 603 -148 603 -148 581 -104.5 c 4,23,24
+ 559 -61 559 -61 515 0 c 5,25,-1
+ 633 0 l 5,0,1
 EndSplineSet
 Refer: 703 1079 N 1 0 0 1 0 0 2
 Validated: 5
@@ -47959,21 +47959,21 @@
 LayerCount: 2
 Fore
 SplineSet
-800 0 m 5
- 856 -62 856 -62 882.5 -114.5 c 4
- 909 -167 909 -167 909 -215 c 4
- 909 -304 909 -304 849 -349.5 c 4
- 789 -395 789 -395 671 -395 c 4
- 626 -395 626 -395 582.5 -389 c 4
- 539 -383 539 -383 495 -371 c 5
- 495 -240 l 5
- 529 -257 529 -257 566.5 -264.5 c 4
- 604 -272 604 -272 651 -272 c 4
- 709 -272 709 -272 739.5 -248 c 4
- 770 -224 770 -224 770 -178 c 4
- 770 -148 770 -148 748 -104.5 c 4
- 726 -61 726 -61 682 0 c 5
- 800 0 l 5
+800 0 m 5,0,1
+ 856 -62 856 -62 882.5 -114.5 c 4,2,3
+ 909 -167 909 -167 909 -215 c 4,4,5
+ 909 -304 909 -304 849 -349.5 c 4,6,7
+ 789 -395 789 -395 671 -395 c 4,8,9
+ 626 -395 626 -395 582.5 -389 c 4,10,11
+ 539 -383 539 -383 495 -371 c 5,12,-1
+ 495 -240 l 5,13,14
+ 529 -257 529 -257 566.5 -264.5 c 4,15,16
+ 604 -272 604 -272 651 -272 c 4,17,18
+ 709 -272 709 -272 739.5 -248 c 4,19,20
+ 770 -224 770 -224 770 -178 c 4,21,22
+ 770 -148 770 -148 748 -104.5 c 4,23,24
+ 726 -61 726 -61 682 0 c 5,25,-1
+ 800 0 l 5,0,1
 EndSplineSet
 Refer: 681 1057 N 1 0 0 1 0 0 2
 Validated: 5
@@ -47986,21 +47986,21 @@
 LayerCount: 2
 Fore
 SplineSet
-804 0 m 5
- 860 -62 860 -62 886.5 -114.5 c 4
- 913 -167 913 -167 913 -215 c 4
- 913 -304 913 -304 853 -349.5 c 4
- 793 -395 793 -395 675 -395 c 4
- 630 -395 630 -395 586.5 -389 c 4
- 543 -383 543 -383 499 -371 c 5
- 499 -240 l 5
- 533 -257 533 -257 570.5 -264.5 c 4
- 608 -272 608 -272 655 -272 c 4
- 713 -272 713 -272 743.5 -248 c 4
- 774 -224 774 -224 774 -178 c 4
- 774 -148 774 -148 752 -104.5 c 4
- 730 -61 730 -61 686 0 c 5
- 804 0 l 5
+804 0 m 5,0,1
+ 860 -62 860 -62 886.5 -114.5 c 4,2,3
+ 913 -167 913 -167 913 -215 c 4,4,5
+ 913 -304 913 -304 853 -349.5 c 4,6,7
+ 793 -395 793 -395 675 -395 c 4,8,9
+ 630 -395 630 -395 586.5 -389 c 4,10,11
+ 543 -383 543 -383 499 -371 c 5,12,-1
+ 499 -240 l 5,13,14
+ 533 -257 533 -257 570.5 -264.5 c 4,15,16
+ 608 -272 608 -272 655 -272 c 4,17,18
+ 713 -272 713 -272 743.5 -248 c 4,19,20
+ 774 -224 774 -224 774 -178 c 4,21,22
+ 774 -148 774 -148 752 -104.5 c 4,23,24
+ 730 -61 730 -61 686 0 c 5,25,-1
+ 804 0 l 5,0,1
 EndSplineSet
 Refer: 713 1089 N 1 0 0 1 0 0 2
 Validated: 5
@@ -48328,17 +48328,17 @@
 LayerCount: 2
 Fore
 SplineSet
-303 1901 m 5
- 422 1901 l 5
- 434 1847 434 1847 484 1818.5 c 4
- 534 1790 534 1790 616 1790 c 4
- 699 1790 699 1790 747.5 1817.5 c 4
- 796 1845 796 1845 811 1901 c 5
- 930 1901 l 5
- 919 1782 919 1782 839.5 1720.5 c 4
- 760 1659 760 1659 616 1659 c 260
- 472 1659 472 1659 393 1720 c 4
- 314 1781 314 1781 303 1901 c 5
+303 1901 m 5,0,-1
+ 422 1901 l 5,1,2
+ 434 1847 434 1847 484 1818.5 c 4,3,4
+ 534 1790 534 1790 616 1790 c 4,5,6
+ 699 1790 699 1790 747.5 1817.5 c 4,7,8
+ 796 1845 796 1845 811 1901 c 5,9,-1
+ 930 1901 l 5,10,11
+ 919 1782 919 1782 839.5 1720.5 c 4,12,13
+ 760 1659 760 1659 616 1659 c 260,14,15
+ 472 1659 472 1659 393 1720 c 4,16,17
+ 314 1781 314 1781 303 1901 c 5,0,-1
 EndSplineSet
 Refer: 670 1046 N 1 0 0 1 0 0 2
 Validated: 1
@@ -48351,17 +48351,17 @@
 LayerCount: 2
 Fore
 SplineSet
-303 1608 m 5
- 422 1608 l 5
- 433 1532 433 1532 481 1495 c 4
- 529 1458 529 1458 616 1458 c 4
- 701 1458 701 1458 749 1495 c 4
- 797 1532 797 1532 811 1608 c 5
- 930 1608 l 5
- 919 1465 919 1465 840 1393 c 4
- 761 1321 761 1321 616 1321 c 4
- 472 1321 472 1321 393 1393 c 4
- 314 1465 314 1465 303 1608 c 5
+303 1608 m 5,0,-1
+ 422 1608 l 5,1,2
+ 433 1532 433 1532 481 1495 c 4,3,4
+ 529 1458 529 1458 616 1458 c 4,5,6
+ 701 1458 701 1458 749 1495 c 4,7,8
+ 797 1532 797 1532 811 1608 c 5,9,-1
+ 930 1608 l 5,10,11
+ 919 1465 919 1465 840 1393 c 4,12,13
+ 761 1321 761 1321 616 1321 c 4,14,15
+ 472 1321 472 1321 393 1393 c 4,16,17
+ 314 1465 314 1465 303 1608 c 5,0,-1
 EndSplineSet
 Refer: 702 1078 N 1 0 0 1 0 0 2
 Validated: 1
@@ -48633,17 +48633,17 @@
 LayerCount: 2
 Fore
 SplineSet
-303 1901 m 5
- 422 1901 l 5
- 434 1847 434 1847 484 1818.5 c 4
- 534 1790 534 1790 616 1790 c 4
- 699 1790 699 1790 747.5 1817.5 c 4
- 796 1845 796 1845 811 1901 c 5
- 930 1901 l 5
- 919 1782 919 1782 839.5 1720.5 c 4
- 760 1659 760 1659 616 1659 c 260
- 472 1659 472 1659 393 1720 c 4
- 314 1781 314 1781 303 1901 c 5
+303 1901 m 5,0,-1
+ 422 1901 l 5,1,2
+ 434 1847 434 1847 484 1818.5 c 4,3,4
+ 534 1790 534 1790 616 1790 c 4,5,6
+ 699 1790 699 1790 747.5 1817.5 c 4,7,8
+ 796 1845 796 1845 811 1901 c 5,9,-1
+ 930 1901 l 5,10,11
+ 919 1782 919 1782 839.5 1720.5 c 4,12,13
+ 760 1659 760 1659 616 1659 c 260,14,15
+ 472 1659 472 1659 393 1720 c 4,16,17
+ 314 1781 314 1781 303 1901 c 5,0,-1
 EndSplineSet
 Refer: 664 1040 N 1 0 0 1 0 0 2
 Validated: 1
@@ -48656,17 +48656,17 @@
 LayerCount: 2
 Fore
 SplineSet
-303 1608 m 5
- 422 1608 l 5
- 433 1532 433 1532 481 1495 c 4
- 529 1458 529 1458 616 1458 c 4
- 701 1458 701 1458 749 1495 c 4
- 797 1532 797 1532 811 1608 c 5
- 930 1608 l 5
- 919 1465 919 1465 840 1393 c 4
- 761 1321 761 1321 616 1321 c 4
- 472 1321 472 1321 393 1393 c 4
- 314 1465 314 1465 303 1608 c 5
+303 1608 m 5,0,-1
+ 422 1608 l 5,1,2
+ 433 1532 433 1532 481 1495 c 4,3,4
+ 529 1458 529 1458 616 1458 c 4,5,6
+ 701 1458 701 1458 749 1495 c 4,7,8
+ 797 1532 797 1532 811 1608 c 5,9,-1
+ 930 1608 l 5,10,11
+ 919 1465 919 1465 840 1393 c 4,12,13
+ 761 1321 761 1321 616 1321 c 4,14,15
+ 472 1321 472 1321 393 1393 c 4,16,17
+ 314 1465 314 1465 303 1608 c 5,0,-1
 EndSplineSet
 Refer: 696 1072 N 1 0 0 1 0 0 2
 Validated: 1
@@ -48679,16 +48679,16 @@
 LayerCount: 2
 Fore
 SplineSet
-319 1870 m 5
- 522 1870 l 5
- 522 1667 l 5
- 319 1667 l 5
- 319 1870 l 5
-711 1870 m 5
- 913 1870 l 5
- 913 1667 l 5
- 711 1667 l 5
- 711 1870 l 5
+319 1870 m 5,0,-1
+ 522 1870 l 5,1,-1
+ 522 1667 l 5,2,-1
+ 319 1667 l 5,3,-1
+ 319 1870 l 5,0,-1
+711 1870 m 5,4,-1
+ 913 1870 l 5,5,-1
+ 913 1667 l 5,6,-1
+ 711 1667 l 5,7,-1
+ 711 1870 l 5,4,-1
 EndSplineSet
 Refer: 664 1040 N 1 0 0 1 0 0 2
 Validated: 1
@@ -48732,17 +48732,17 @@
 LayerCount: 2
 Fore
 SplineSet
-321 1901 m 5
- 440 1901 l 5
- 452 1847 452 1847 502 1818.5 c 4
- 552 1790 552 1790 634 1790 c 4
- 717 1790 717 1790 765.5 1817.5 c 4
- 814 1845 814 1845 829 1901 c 5
- 948 1901 l 5
- 937 1782 937 1782 857.5 1720.5 c 4
- 778 1659 778 1659 634 1659 c 260
- 490 1659 490 1659 411 1720 c 4
- 332 1781 332 1781 321 1901 c 5
+321 1901 m 5,0,-1
+ 440 1901 l 5,1,2
+ 452 1847 452 1847 502 1818.5 c 4,3,4
+ 552 1790 552 1790 634 1790 c 4,5,6
+ 717 1790 717 1790 765.5 1817.5 c 4,7,8
+ 814 1845 814 1845 829 1901 c 5,9,-1
+ 948 1901 l 5,10,11
+ 937 1782 937 1782 857.5 1720.5 c 4,12,13
+ 778 1659 778 1659 634 1659 c 260,14,15
+ 490 1659 490 1659 411 1720 c 4,16,17
+ 332 1781 332 1781 321 1901 c 5,0,-1
 EndSplineSet
 Refer: 669 1045 N 1 0 0 1 0 0 2
 Validated: 1
@@ -48755,17 +48755,17 @@
 LayerCount: 2
 Fore
 SplineSet
-317 1608 m 5
- 436 1608 l 5
- 447 1532 447 1532 495 1495 c 4
- 543 1458 543 1458 630 1458 c 4
- 715 1458 715 1458 763 1495 c 4
- 811 1532 811 1532 825 1608 c 5
- 944 1608 l 5
- 933 1465 933 1465 854 1393 c 4
- 775 1321 775 1321 630 1321 c 4
- 486 1321 486 1321 407 1393 c 4
- 328 1465 328 1465 317 1608 c 5
+317 1608 m 5,0,-1
+ 436 1608 l 5,1,2
+ 447 1532 447 1532 495 1495 c 4,3,4
+ 543 1458 543 1458 630 1458 c 4,5,6
+ 715 1458 715 1458 763 1495 c 4,7,8
+ 811 1532 811 1532 825 1608 c 5,9,-1
+ 944 1608 l 5,10,11
+ 933 1465 933 1465 854 1393 c 4,12,13
+ 775 1321 775 1321 630 1321 c 4,14,15
+ 486 1321 486 1321 407 1393 c 4,16,17
+ 328 1465 328 1465 317 1608 c 5,0,-1
 EndSplineSet
 Refer: 701 1077 N 1 0 0 1 0 0 2
 Validated: 1
@@ -48846,16 +48846,16 @@
 LayerCount: 2
 Fore
 SplineSet
-319 1870 m 5
- 522 1870 l 5
- 522 1667 l 5
- 319 1667 l 5
- 319 1870 l 5
-711 1870 m 5
- 913 1870 l 5
- 913 1667 l 5
- 711 1667 l 5
- 711 1870 l 5
+319 1870 m 5,0,-1
+ 522 1870 l 5,1,-1
+ 522 1667 l 5,2,-1
+ 319 1667 l 5,3,-1
+ 319 1870 l 5,0,-1
+711 1870 m 5,4,-1
+ 913 1870 l 5,5,-1
+ 913 1667 l 5,6,-1
+ 711 1667 l 5,7,-1
+ 711 1870 l 5,4,-1
 EndSplineSet
 Refer: 828 1240 N 1 0 0 1 0 0 2
 Validated: 1
@@ -48879,16 +48879,16 @@
 LayerCount: 2
 Fore
 SplineSet
-319 1870 m 5
- 522 1870 l 5
- 522 1667 l 5
- 319 1667 l 5
- 319 1870 l 5
-711 1870 m 5
- 913 1870 l 5
- 913 1667 l 5
- 711 1667 l 5
- 711 1870 l 5
+319 1870 m 5,0,-1
+ 522 1870 l 5,1,-1
+ 522 1667 l 5,2,-1
+ 319 1667 l 5,3,-1
+ 319 1870 l 5,0,-1
+711 1870 m 5,4,-1
+ 913 1870 l 5,5,-1
+ 913 1667 l 5,6,-1
+ 711 1667 l 5,7,-1
+ 711 1870 l 5,4,-1
 EndSplineSet
 Refer: 670 1046 N 1 0 0 1 0 0 2
 Validated: 1
@@ -48912,16 +48912,16 @@
 LayerCount: 2
 Fore
 SplineSet
-302 1870 m 5
- 505 1870 l 5
- 505 1667 l 5
- 302 1667 l 5
- 302 1870 l 5
-694 1870 m 5
- 896 1870 l 5
- 896 1667 l 5
- 694 1667 l 5
- 694 1870 l 5
+302 1870 m 5,0,-1
+ 505 1870 l 5,1,-1
+ 505 1667 l 5,2,-1
+ 302 1667 l 5,3,-1
+ 302 1870 l 5,0,-1
+694 1870 m 5,4,-1
+ 896 1870 l 5,5,-1
+ 896 1667 l 5,6,-1
+ 694 1667 l 5,7,-1
+ 694 1870 l 5,4,-1
 EndSplineSet
 Refer: 671 1047 N 1 0 0 1 0 0 2
 Validated: 1
@@ -49013,11 +49013,11 @@
 LayerCount: 2
 Fore
 SplineSet
-317 1840 m 5
- 915 1840 l 5
- 915 1692 l 5
- 317 1692 l 5
- 317 1840 l 5
+317 1840 m 5,0,-1
+ 915 1840 l 5,1,-1
+ 915 1692 l 5,2,-1
+ 317 1692 l 5,3,-1
+ 317 1840 l 5,0,-1
 EndSplineSet
 Refer: 672 1048 N 1 0 0 1 0 0 2
 Validated: 1
@@ -49030,11 +49030,11 @@
 LayerCount: 2
 Fore
 SplineSet
-317 1526 m 5
- 915 1526 l 5
- 915 1378 l 5
- 317 1378 l 5
- 317 1526 l 5
+317 1526 m 5,0,-1
+ 915 1526 l 5,1,-1
+ 915 1378 l 5,2,-1
+ 317 1378 l 5,3,-1
+ 317 1526 l 5,0,-1
 EndSplineSet
 Refer: 704 1080 N 1 0 0 1 0 0 2
 Validated: 1
@@ -49047,16 +49047,16 @@
 LayerCount: 2
 Fore
 SplineSet
-319 1870 m 5
- 522 1870 l 5
- 522 1667 l 5
- 319 1667 l 5
- 319 1870 l 5
-711 1870 m 5
- 913 1870 l 5
- 913 1667 l 5
- 711 1667 l 5
- 711 1870 l 5
+319 1870 m 5,0,-1
+ 522 1870 l 5,1,-1
+ 522 1667 l 5,2,-1
+ 319 1667 l 5,3,-1
+ 319 1870 l 5,0,-1
+711 1870 m 5,4,-1
+ 913 1870 l 5,5,-1
+ 913 1667 l 5,6,-1
+ 711 1667 l 5,7,-1
+ 711 1870 l 5,4,-1
 EndSplineSet
 Refer: 672 1048 N 1 0 0 1 0 0 2
 Validated: 1
@@ -49080,16 +49080,16 @@
 LayerCount: 2
 Fore
 SplineSet
-319 1870 m 5
- 522 1870 l 5
- 522 1667 l 5
- 319 1667 l 5
- 319 1870 l 5
-711 1870 m 5
- 913 1870 l 5
- 913 1667 l 5
- 711 1667 l 5
- 711 1870 l 5
+319 1870 m 5,0,-1
+ 522 1870 l 5,1,-1
+ 522 1667 l 5,2,-1
+ 319 1667 l 5,3,-1
+ 319 1870 l 5,0,-1
+711 1870 m 5,4,-1
+ 913 1870 l 5,5,-1
+ 913 1667 l 5,6,-1
+ 711 1667 l 5,7,-1
+ 711 1870 l 5,4,-1
 EndSplineSet
 Refer: 678 1054 N 1 0 0 1 0 0 2
 Validated: 1
@@ -49177,16 +49177,16 @@
 LayerCount: 2
 Fore
 SplineSet
-319 1870 m 5
- 522 1870 l 5
- 522 1667 l 5
- 319 1667 l 5
- 319 1870 l 5
-711 1870 m 5
- 913 1870 l 5
- 913 1667 l 5
- 711 1667 l 5
- 711 1870 l 5
+319 1870 m 5,0,-1
+ 522 1870 l 5,1,-1
+ 522 1667 l 5,2,-1
+ 319 1667 l 5,3,-1
+ 319 1870 l 5,0,-1
+711 1870 m 5,4,-1
+ 913 1870 l 5,5,-1
+ 913 1667 l 5,6,-1
+ 711 1667 l 5,7,-1
+ 711 1870 l 5,4,-1
 EndSplineSet
 Refer: 844 1256 N 1 0 0 1 0 0 2
 Validated: 1
@@ -49210,16 +49210,16 @@
 LayerCount: 2
 Fore
 SplineSet
-286 1870 m 5
- 489 1870 l 5
- 489 1667 l 5
- 286 1667 l 5
- 286 1870 l 5
-678 1870 m 5
- 880 1870 l 5
- 880 1667 l 5
- 678 1667 l 5
- 678 1870 l 5
+286 1870 m 5,0,-1
+ 489 1870 l 5,1,-1
+ 489 1667 l 5,2,-1
+ 286 1667 l 5,3,-1
+ 286 1870 l 5,0,-1
+678 1870 m 5,4,-1
+ 880 1870 l 5,5,-1
+ 880 1667 l 5,6,-1
+ 678 1667 l 5,7,-1
+ 678 1870 l 5,4,-1
 EndSplineSet
 Refer: 693 1069 N 1 0 0 1 0 0 2
 Validated: 1
@@ -49243,11 +49243,11 @@
 LayerCount: 2
 Fore
 SplineSet
-317 1840 m 5
- 915 1840 l 5
- 915 1692 l 5
- 317 1692 l 5
- 317 1840 l 5
+317 1840 m 5,0,-1
+ 915 1840 l 5,1,-1
+ 915 1692 l 5,2,-1
+ 317 1692 l 5,3,-1
+ 317 1840 l 5,0,-1
 EndSplineSet
 Refer: 683 1059 N 1 0 0 1 0 0 2
 Validated: 1
@@ -49260,11 +49260,11 @@
 LayerCount: 2
 Fore
 SplineSet
-317 1526 m 5
- 915 1526 l 5
- 915 1378 l 5
- 317 1378 l 5
- 317 1526 l 5
+317 1526 m 5,0,-1
+ 915 1526 l 5,1,-1
+ 915 1378 l 5,2,-1
+ 317 1378 l 5,3,-1
+ 317 1526 l 5,0,-1
 EndSplineSet
 Refer: 715 1091 N 1 0 0 1 0 0 2
 Validated: 1
@@ -49277,16 +49277,16 @@
 LayerCount: 2
 Fore
 SplineSet
-319 1870 m 5
- 522 1870 l 5
- 522 1667 l 5
- 319 1667 l 5
- 319 1870 l 5
-711 1870 m 5
- 913 1870 l 5
- 913 1667 l 5
- 711 1667 l 5
- 711 1870 l 5
+319 1870 m 5,0,-1
+ 522 1870 l 5,1,-1
+ 522 1667 l 5,2,-1
+ 319 1667 l 5,3,-1
+ 319 1870 l 5,0,-1
+711 1870 m 5,4,-1
+ 913 1870 l 5,5,-1
+ 913 1667 l 5,6,-1
+ 711 1667 l 5,7,-1
+ 711 1870 l 5,4,-1
 EndSplineSet
 Refer: 683 1059 N 1 0 0 1 0 0 2
 Validated: 1
@@ -49310,16 +49310,16 @@
 LayerCount: 2
 Fore
 SplineSet
-860 1899 m 5
- 1046 1899 l 5
- 817 1635 l 5
- 663 1635 l 5
- 860 1899 l 5
-541 1899 m 5
- 727 1899 l 5
- 498 1635 l 5
- 344 1635 l 5
- 541 1899 l 5
+860 1899 m 5,0,-1
+ 1046 1899 l 5,1,-1
+ 817 1635 l 5,2,-1
+ 663 1635 l 5,3,-1
+ 860 1899 l 5,0,-1
+541 1899 m 5,4,-1
+ 727 1899 l 5,5,-1
+ 498 1635 l 5,6,-1
+ 344 1635 l 5,7,-1
+ 541 1899 l 5,4,-1
 EndSplineSet
 Refer: 683 1059 N 1 0 0 1 0 0 2
 Validated: 1
@@ -49332,16 +49332,16 @@
 LayerCount: 2
 Fore
 SplineSet
-535 1638 m 5
- 705 1638 l 5
- 481 1262 l 5
- 344 1262 l 5
- 535 1638 l 5
-868 1638 m 5
- 1047 1638 l 5
- 799 1262 l 5
- 664 1262 l 5
- 868 1638 l 5
+535 1638 m 5,0,-1
+ 705 1638 l 5,1,-1
+ 481 1262 l 5,2,-1
+ 344 1262 l 5,3,-1
+ 535 1638 l 5,0,-1
+868 1638 m 5,4,-1
+ 1047 1638 l 5,5,-1
+ 799 1262 l 5,6,-1
+ 664 1262 l 5,7,-1
+ 868 1638 l 5,4,-1
 EndSplineSet
 Refer: 715 1091 N 1 0 0 1 0 0 2
 Validated: 1
@@ -49354,16 +49354,16 @@
 LayerCount: 2
 Fore
 SplineSet
-319 1870 m 5
- 522 1870 l 5
- 522 1667 l 5
- 319 1667 l 5
- 319 1870 l 5
-711 1870 m 5
- 913 1870 l 5
- 913 1667 l 5
- 711 1667 l 5
- 711 1870 l 5
+319 1870 m 5,0,-1
+ 522 1870 l 5,1,-1
+ 522 1667 l 5,2,-1
+ 319 1667 l 5,3,-1
+ 319 1870 l 5,0,-1
+711 1870 m 5,4,-1
+ 913 1870 l 5,5,-1
+ 913 1667 l 5,6,-1
+ 711 1667 l 5,7,-1
+ 711 1870 l 5,4,-1
 EndSplineSet
 Refer: 687 1063 N 1 0 0 1 0 0 2
 Validated: 1
@@ -49431,16 +49431,16 @@
 LayerCount: 2
 Fore
 SplineSet
-319 1870 m 5
- 522 1870 l 5
- 522 1667 l 5
- 319 1667 l 5
- 319 1870 l 5
-711 1870 m 5
- 913 1870 l 5
- 913 1667 l 5
- 711 1667 l 5
- 711 1870 l 5
+319 1870 m 5,0,-1
+ 522 1870 l 5,1,-1
+ 522 1667 l 5,2,-1
+ 319 1667 l 5,3,-1
+ 319 1870 l 5,0,-1
+711 1870 m 5,4,-1
+ 913 1870 l 5,5,-1
+ 913 1667 l 5,6,-1
+ 711 1667 l 5,7,-1
+ 711 1870 l 5,4,-1
 EndSplineSet
 Refer: 691 1067 N 1 0 0 1 0 0 2
 Validated: 1
@@ -50999,11 +50999,11 @@
 LayerCount: 2
 Fore
 SplineSet
-825 -200 m 5
- 975 -200 l 5
- 975 -350 l 5
- 825 -350 l 5
- 825 -200 l 5
+825 -200 m 5,0,-1
+ 975 -200 l 5,1,-1
+ 975 -350 l 5,2,-1
+ 825 -350 l 5,3,-1
+ 825 -200 l 5,0,-1
 EndSplineSet
 Refer: 988 1646 N 1 0 0 1 0 0 2
 Validated: 1
@@ -51016,16 +51016,16 @@
 LayerCount: 2
 Fore
 SplineSet
-500 1050 m 5
- 650 1050 l 5
- 650 900 l 5
- 500 900 l 5
- 500 1050 l 5
-250 1050 m 5
- 400 1050 l 5
- 400 900 l 5
- 250 900 l 5
- 250 1050 l 5
+500 1050 m 5,0,-1
+ 650 1050 l 5,1,-1
+ 650 900 l 5,2,-1
+ 500 900 l 5,3,-1
+ 500 1050 l 5,0,-1
+250 1050 m 5,4,-1
+ 400 1050 l 5,5,-1
+ 400 900 l 5,6,-1
+ 250 900 l 5,7,-1
+ 250 1050 l 5,4,-1
 EndSplineSet
 Refer: 957 1607 N 1 0 0 1 0 0 2
 Validated: 1
@@ -51038,16 +51038,16 @@
 LayerCount: 2
 Fore
 SplineSet
-950 800 m 5
- 1100 800 l 5
- 1100 650 l 5
- 950 650 l 5
- 950 800 l 5
-700 800 m 5
- 850 800 l 5
- 850 650 l 5
- 700 650 l 5
- 700 800 l 5
+950 800 m 5,0,-1
+ 1100 800 l 5,1,-1
+ 1100 650 l 5,2,-1
+ 950 650 l 5,3,-1
+ 950 800 l 5,0,-1
+700 800 m 5,4,-1
+ 850 800 l 5,5,-1
+ 850 650 l 5,6,-1
+ 700 650 l 5,7,-1
+ 700 800 l 5,4,-1
 EndSplineSet
 Refer: 988 1646 N 1 0 0 1 0 0 2
 Validated: 1
@@ -51060,21 +51060,21 @@
 LayerCount: 2
 Fore
 SplineSet
-825 1050 m 5
- 975 1050 l 5
- 975 900 l 5
- 825 900 l 5
- 825 1050 l 5
-950 800 m 5
- 1100 800 l 5
- 1100 650 l 5
- 950 650 l 5
- 950 800 l 5
-700 800 m 5
- 850 800 l 5
- 850 650 l 5
- 700 650 l 5
- 700 800 l 5
+825 1050 m 5,0,-1
+ 975 1050 l 5,1,-1
+ 975 900 l 5,2,-1
+ 825 900 l 5,3,-1
+ 825 1050 l 5,0,-1
+950 800 m 5,4,-1
+ 1100 800 l 5,5,-1
+ 1100 650 l 5,6,-1
+ 950 650 l 5,7,-1
+ 950 800 l 5,4,-1
+700 800 m 5,8,-1
+ 850 800 l 5,9,-1
+ 850 650 l 5,10,-1
+ 700 650 l 5,11,-1
+ 700 800 l 5,8,-1
 EndSplineSet
 Refer: 988 1646 N 1 0 0 1 0 0 2
 Validated: 1
@@ -51087,11 +51087,11 @@
 LayerCount: 2
 Fore
 SplineSet
-775 175 m 5
- 925 175 l 5
- 925 25 l 5
- 775 25 l 5
- 775 175 l 5
+775 175 m 5,0,-1
+ 925 175 l 5,1,-1
+ 925 25 l 5,2,-1
+ 775 25 l 5,3,-1
+ 775 175 l 5,0,-1
 EndSplineSet
 Refer: 936 1581 N 1 0 0 1 0 0 2
 Validated: 1
@@ -51133,11 +51133,11 @@
 LayerCount: 2
 Fore
 SplineSet
-575 1200 m 5
- 725 1200 l 5
- 725 1050 l 5
- 575 1050 l 5
- 575 1200 l 5
+575 1200 m 5,0,-1
+ 725 1200 l 5,1,-1
+ 725 1050 l 5,2,-1
+ 575 1050 l 5,3,-1
+ 575 1200 l 5,0,-1
 EndSplineSet
 Refer: 936 1581 N 1 0 0 1 0 0 2
 Validated: 1
@@ -51176,11 +51176,11 @@
 LayerCount: 2
 Fore
 SplineSet
-325 1200 m 5
- 475 1200 l 5
- 475 1050 l 5
- 325 1050 l 5
- 325 1200 l 5
+325 1200 m 5,0,-1
+ 475 1200 l 5,1,-1
+ 475 1050 l 5,2,-1
+ 325 1050 l 5,3,-1
+ 325 1200 l 5,0,-1
 EndSplineSet
 Refer: 938 1583 N 1 0 0 1 0 0 2
 Validated: 1
@@ -51215,11 +51215,11 @@
 LayerCount: 2
 Fore
 SplineSet
-625 950 m 5
- 775 950 l 5
- 775 800 l 5
- 625 800 l 5
- 625 950 l 5
+625 950 m 5,0,-1
+ 775 950 l 5,1,-1
+ 775 800 l 5,2,-1
+ 625 800 l 5,3,-1
+ 625 950 l 5,0,-1
 EndSplineSet
 Refer: 940 1585 N 1 0 0 1 0 0 2
 Validated: 1
@@ -51280,21 +51280,21 @@
 LayerCount: 2
 Fore
 SplineSet
-1375 1200 m 5
- 1525 1200 l 5
- 1525 1050 l 5
- 1375 1050 l 5
- 1375 1200 l 5
-1500 950 m 5
- 1650 950 l 5
- 1650 800 l 5
- 1500 800 l 5
- 1500 950 l 5
-1250 950 m 5
- 1400 950 l 5
- 1400 800 l 5
- 1250 800 l 5
- 1250 950 l 5
+1375 1200 m 5,0,-1
+ 1525 1200 l 5,1,-1
+ 1525 1050 l 5,2,-1
+ 1375 1050 l 5,3,-1
+ 1375 1200 l 5,0,-1
+1500 950 m 5,4,-1
+ 1650 950 l 5,5,-1
+ 1650 800 l 5,6,-1
+ 1500 800 l 5,7,-1
+ 1500 950 l 5,4,-1
+1250 950 m 5,8,-1
+ 1400 950 l 5,9,-1
+ 1400 800 l 5,10,-1
+ 1250 800 l 5,11,-1
+ 1250 950 l 5,8,-1
 EndSplineSet
 Refer: 942 1587 N 1 0 0 1 0 0 2
 Validated: 1
@@ -51354,11 +51354,11 @@
 LayerCount: 2
 Fore
 SplineSet
-1275 950 m 5
- 1425 950 l 5
- 1425 800 l 5
- 1275 800 l 5
- 1275 950 l 5
+1275 950 m 5,0,-1
+ 1425 950 l 5,1,-1
+ 1425 800 l 5,2,-1
+ 1275 800 l 5,3,-1
+ 1275 950 l 5,0,-1
 EndSplineSet
 Refer: 944 1589 N 1 0 0 1 0 0 2
 Validated: 1
@@ -51404,11 +51404,11 @@
 LayerCount: 2
 Fore
 SplineSet
-975 1000 m 5
- 1125 1000 l 5
- 1125 850 l 5
- 975 850 l 5
- 975 1000 l 5
+975 1000 m 5,0,-1
+ 1125 1000 l 5,1,-1
+ 1125 850 l 5,2,-1
+ 975 850 l 5,3,-1
+ 975 1000 l 5,0,-1
 EndSplineSet
 Refer: 946 1591 N 1 0 0 1 0 0 2
 Validated: 1
@@ -51456,11 +51456,11 @@
 LayerCount: 2
 Fore
 SplineSet
-375 1350 m 5
- 525 1350 l 5
- 525 1200 l 5
- 375 1200 l 5
- 375 1350 l 5
+375 1350 m 5,0,-1
+ 525 1350 l 5,1,-1
+ 525 1200 l 5,2,-1
+ 375 1200 l 5,3,-1
+ 375 1350 l 5,0,-1
 EndSplineSet
 Refer: 948 1593 N 1 0 0 1 0 0 2
 Validated: 1
@@ -51537,16 +51537,16 @@
 LayerCount: 2
 Fore
 SplineSet
-1100 1300 m 5
- 1250 1300 l 5
- 1250 1150 l 5
- 1100 1150 l 5
- 1100 1300 l 5
-850 1300 m 5
- 1000 1300 l 5
- 1000 1150 l 5
- 850 1150 l 5
- 850 1300 l 5
+1100 1300 m 5,0,-1
+ 1250 1300 l 5,1,-1
+ 1250 1150 l 5,2,-1
+ 1100 1150 l 5,3,-1
+ 1100 1300 l 5,0,-1
+850 1300 m 5,4,-1
+ 1000 1300 l 5,5,-1
+ 1000 1150 l 5,6,-1
+ 850 1150 l 5,7,-1
+ 850 1300 l 5,4,-1
 EndSplineSet
 Refer: 989 1647 N 1 0 0 1 0 0 2
 Validated: 1
@@ -51808,16 +51808,16 @@
 LayerCount: 2
 Fore
 SplineSet
-750 -350 m 5
- 900 -350 l 5
- 900 -500 l 5
- 750 -500 l 5
- 750 -350 l 5
-500 -350 m 5
- 650 -350 l 5
- 650 -500 l 5
- 500 -500 l 5
- 500 -350 l 5
+750 -350 m 5,0,-1
+ 900 -350 l 5,1,-1
+ 900 -500 l 5,2,-1
+ 750 -500 l 5,3,-1
+ 750 -350 l 5,0,-1
+500 -350 m 5,4,-1
+ 650 -350 l 5,5,-1
+ 650 -500 l 5,6,-1
+ 500 -500 l 5,7,-1
+ 500 -350 l 5,4,-1
 EndSplineSet
 Refer: 959 1609 N 1 0 0 1 0 0 2
 Validated: 1
@@ -52617,16 +52617,16 @@
 LayerCount: 2
 Fore
 SplineSet
-825 800 m 5
- 975 800 l 5
- 975 650 l 5
- 825 650 l 5
- 825 800 l 5
-825 1050 m 5
- 975 1050 l 5
- 975 900 l 5
- 825 900 l 5
- 825 1050 l 5
+825 800 m 5,0,-1
+ 975 800 l 5,1,-1
+ 975 650 l 5,2,-1
+ 825 650 l 5,3,-1
+ 825 800 l 5,0,-1
+825 1050 m 5,4,-1
+ 975 1050 l 5,5,-1
+ 975 900 l 5,6,-1
+ 825 900 l 5,7,-1
+ 825 1050 l 5,4,-1
 EndSplineSet
 Refer: 988 1646 N 1 0 0 1 0 0 2
 Validated: 1
@@ -52639,16 +52639,16 @@
 LayerCount: 2
 Fore
 SplineSet
-825 -350 m 5
- 975 -350 l 5
- 975 -500 l 5
- 825 -500 l 5
- 825 -350 l 5
-825 -100 m 5
- 975 -100 l 5
- 975 -250 l 5
- 825 -250 l 5
- 825 -100 l 5
+825 -350 m 5,0,-1
+ 975 -350 l 5,1,-1
+ 975 -500 l 5,2,-1
+ 825 -500 l 5,3,-1
+ 825 -350 l 5,0,-1
+825 -100 m 5,4,-1
+ 975 -100 l 5,5,-1
+ 975 -250 l 5,6,-1
+ 825 -250 l 5,7,-1
+ 825 -100 l 5,4,-1
 EndSplineSet
 Refer: 988 1646 N 1 0 0 1 0 0 2
 Validated: 1
@@ -52661,34 +52661,34 @@
 LayerCount: 2
 Fore
 SplineSet
-997 -148 m 4
- 997 -108 997 -108 969 -80 c 4
- 941 -51 941 -51 900 -51 c 4
- 859 -51 859 -51 831 -79 c 4
- 803 -107 803 -107 803 -148 c 4
- 803 -190 803 -190 831 -218 c 4
- 859 -245 859 -245 900 -245 c 4
- 941 -245 941 -245 969 -217 c 4
- 997 -189 997 -189 997 -148 c 4
-1119 -148 m 4
- 1119 -240 1119 -240 1056 -304 c 4
- 992 -368 992 -368 900 -368 c 4
- 808 -368 808 -368 745 -304 c 4
- 681 -240 681 -240 681 -148 c 4
- 681 -56 681 -56 745 8 c 4
- 808 71 808 71 900 71 c 4
- 992 71 992 71 1056 8 c 4
- 1119 -56 1119 -56 1119 -148 c 4
-950 800 m 5
- 1100 800 l 5
- 1100 650 l 5
- 950 650 l 5
- 950 800 l 5
-700 800 m 5
- 850 800 l 5
- 850 650 l 5
- 700 650 l 5
- 700 800 l 5
+997 -148 m 4,0,1
+ 997 -108 997 -108 969 -80 c 4,2,3
+ 941 -51 941 -51 900 -51 c 4,4,5
+ 859 -51 859 -51 831 -79 c 4,6,7
+ 803 -107 803 -107 803 -148 c 4,8,9
+ 803 -190 803 -190 831 -218 c 4,10,11
+ 859 -245 859 -245 900 -245 c 4,12,13
+ 941 -245 941 -245 969 -217 c 4,14,15
+ 997 -189 997 -189 997 -148 c 4,0,1
+1119 -148 m 4,16,17
+ 1119 -240 1119 -240 1056 -304 c 4,18,19
+ 992 -368 992 -368 900 -368 c 4,20,21
+ 808 -368 808 -368 745 -304 c 4,22,23
+ 681 -240 681 -240 681 -148 c 4,24,25
+ 681 -56 681 -56 745 8 c 4,26,27
+ 808 71 808 71 900 71 c 4,28,29
+ 992 71 992 71 1056 8 c 4,30,31
+ 1119 -56 1119 -56 1119 -148 c 4,16,17
+950 800 m 5,32,-1
+ 1100 800 l 5,33,-1
+ 1100 650 l 5,34,-1
+ 950 650 l 5,35,-1
+ 950 800 l 5,32,-1
+700 800 m 5,36,-1
+ 850 800 l 5,37,-1
+ 850 650 l 5,38,-1
+ 700 650 l 5,39,-1
+ 700 800 l 5,36,-1
 EndSplineSet
 Refer: 988 1646 N 1 0 0 1 0 0 2
 Validated: 5
@@ -52701,21 +52701,21 @@
 LayerCount: 2
 Fore
 SplineSet
-825 700 m 5
- 975 700 l 5
- 975 550 l 5
- 825 550 l 5
- 825 700 l 5
-950 950 m 5
- 1100 950 l 5
- 1100 800 l 5
- 950 800 l 5
- 950 950 l 5
-700 950 m 5
- 850 950 l 5
- 850 800 l 5
- 700 800 l 5
- 700 950 l 5
+825 700 m 5,0,-1
+ 975 700 l 5,1,-1
+ 975 550 l 5,2,-1
+ 825 550 l 5,3,-1
+ 825 700 l 5,0,-1
+950 950 m 5,4,-1
+ 1100 950 l 5,5,-1
+ 1100 800 l 5,6,-1
+ 950 800 l 5,7,-1
+ 950 950 l 5,4,-1
+700 950 m 5,8,-1
+ 850 950 l 5,9,-1
+ 850 800 l 5,10,-1
+ 700 800 l 5,11,-1
+ 700 950 l 5,8,-1
 EndSplineSet
 Refer: 988 1646 N 1 0 0 1 0 0 2
 Validated: 1
@@ -52728,21 +52728,21 @@
 LayerCount: 2
 Fore
 SplineSet
-825 -350 m 5
- 975 -350 l 5
- 975 -500 l 5
- 825 -500 l 5
- 825 -350 l 5
-950 -100 m 5
- 1100 -100 l 5
- 1100 -250 l 5
- 950 -250 l 5
- 950 -100 l 5
-700 -100 m 5
- 850 -100 l 5
- 850 -250 l 5
- 700 -250 l 5
- 700 -100 l 5
+825 -350 m 5,0,-1
+ 975 -350 l 5,1,-1
+ 975 -500 l 5,2,-1
+ 825 -500 l 5,3,-1
+ 825 -350 l 5,0,-1
+950 -100 m 5,4,-1
+ 1100 -100 l 5,5,-1
+ 1100 -250 l 5,6,-1
+ 950 -250 l 5,7,-1
+ 950 -100 l 5,4,-1
+700 -100 m 5,8,-1
+ 850 -100 l 5,9,-1
+ 850 -250 l 5,10,-1
+ 700 -250 l 5,11,-1
+ 700 -100 l 5,8,-1
 EndSplineSet
 Refer: 988 1646 N 1 0 0 1 0 0 2
 Validated: 1
@@ -52755,26 +52755,26 @@
 LayerCount: 2
 Fore
 SplineSet
-950 800 m 5
- 1100 800 l 5
- 1100 650 l 5
- 950 650 l 5
- 950 800 l 5
-950 1050 m 5
- 1100 1050 l 5
- 1100 900 l 5
- 950 900 l 5
- 950 1050 l 5
-700 800 m 5
- 850 800 l 5
- 850 650 l 5
- 700 650 l 5
- 700 800 l 5
-700 1050 m 5
- 850 1050 l 5
- 850 900 l 5
- 700 900 l 5
- 700 1050 l 5
+950 800 m 5,0,-1
+ 1100 800 l 5,1,-1
+ 1100 650 l 5,2,-1
+ 950 650 l 5,3,-1
+ 950 800 l 5,0,-1
+950 1050 m 5,4,-1
+ 1100 1050 l 5,5,-1
+ 1100 900 l 5,6,-1
+ 950 900 l 5,7,-1
+ 950 1050 l 5,4,-1
+700 800 m 5,8,-1
+ 850 800 l 5,9,-1
+ 850 650 l 5,10,-1
+ 700 650 l 5,11,-1
+ 700 800 l 5,8,-1
+700 1050 m 5,12,-1
+ 850 1050 l 5,13,-1
+ 850 900 l 5,14,-1
+ 700 900 l 5,15,-1
+ 700 1050 l 5,12,-1
 EndSplineSet
 Refer: 988 1646 N 1 0 0 1 0 0 2
 Validated: 1
@@ -52787,26 +52787,26 @@
 LayerCount: 2
 Fore
 SplineSet
-950 -350 m 5
- 1100 -350 l 5
- 1100 -500 l 5
- 950 -500 l 5
- 950 -350 l 5
-950 -100 m 5
- 1100 -100 l 5
- 1100 -250 l 5
- 950 -250 l 5
- 950 -100 l 5
-700 -350 m 5
- 850 -350 l 5
- 850 -500 l 5
- 700 -500 l 5
- 700 -350 l 5
-700 -100 m 5
- 850 -100 l 5
- 850 -250 l 5
- 700 -250 l 5
- 700 -100 l 5
+950 -350 m 5,0,-1
+ 1100 -350 l 5,1,-1
+ 1100 -500 l 5,2,-1
+ 950 -500 l 5,3,-1
+ 950 -350 l 5,0,-1
+950 -100 m 5,4,-1
+ 1100 -100 l 5,5,-1
+ 1100 -250 l 5,6,-1
+ 950 -250 l 5,7,-1
+ 950 -100 l 5,4,-1
+700 -350 m 5,8,-1
+ 850 -350 l 5,9,-1
+ 850 -500 l 5,10,-1
+ 700 -500 l 5,11,-1
+ 700 -350 l 5,8,-1
+700 -100 m 5,12,-1
+ 850 -100 l 5,13,-1
+ 850 -250 l 5,14,-1
+ 700 -250 l 5,15,-1
+ 700 -100 l 5,12,-1
 EndSplineSet
 Refer: 988 1646 N 1 0 0 1 0 0 2
 Validated: 1
@@ -52830,16 +52830,16 @@
 LayerCount: 2
 Fore
 SplineSet
-575 1200 m 5
- 725 1200 l 5
- 725 1050 l 5
- 575 1050 l 5
- 575 1200 l 5
-575 1450 m 5
- 725 1450 l 5
- 725 1300 l 5
- 575 1300 l 5
- 575 1450 l 5
+575 1200 m 5,0,-1
+ 725 1200 l 5,1,-1
+ 725 1050 l 5,2,-1
+ 575 1050 l 5,3,-1
+ 575 1200 l 5,0,-1
+575 1450 m 5,4,-1
+ 725 1450 l 5,5,-1
+ 725 1300 l 5,6,-1
+ 575 1300 l 5,7,-1
+ 575 1450 l 5,4,-1
 EndSplineSet
 Refer: 936 1581 N 1 0 0 1 0 0 2
 Validated: 1
@@ -52852,16 +52852,16 @@
 LayerCount: 2
 Fore
 SplineSet
-900 175 m 5
- 1050 175 l 5
- 1050 25 l 5
- 900 25 l 5
- 900 175 l 5
-650 175 m 5
- 800 175 l 5
- 800 25 l 5
- 650 25 l 5
- 650 175 l 5
+900 175 m 5,0,-1
+ 1050 175 l 5,1,-1
+ 1050 25 l 5,2,-1
+ 900 25 l 5,3,-1
+ 900 175 l 5,0,-1
+650 175 m 5,4,-1
+ 800 175 l 5,5,-1
+ 800 25 l 5,6,-1
+ 650 25 l 5,7,-1
+ 650 175 l 5,4,-1
 EndSplineSet
 Refer: 936 1581 N 1 0 0 1 0 0 2
 Validated: 1
@@ -52874,16 +52874,16 @@
 LayerCount: 2
 Fore
 SplineSet
-775 75 m 5
- 925 75 l 5
- 925 -75 l 5
- 775 -75 l 5
- 775 75 l 5
-775 325 m 5
- 925 325 l 5
- 925 175 l 5
- 775 175 l 5
- 775 325 l 5
+775 75 m 5,0,-1
+ 925 75 l 5,1,-1
+ 925 -75 l 5,2,-1
+ 775 -75 l 5,3,-1
+ 775 75 l 5,0,-1
+775 325 m 5,4,-1
+ 925 325 l 5,5,-1
+ 925 175 l 5,6,-1
+ 775 175 l 5,7,-1
+ 775 325 l 5,4,-1
 EndSplineSet
 Refer: 936 1581 N 1 0 0 1 0 0 2
 Validated: 1
@@ -52896,21 +52896,21 @@
 LayerCount: 2
 Fore
 SplineSet
-575 1450 m 5
- 725 1450 l 5
- 725 1300 l 5
- 575 1300 l 5
- 575 1450 l 5
-700 1200 m 5
- 850 1200 l 5
- 850 1050 l 5
- 700 1050 l 5
- 700 1200 l 5
-450 1200 m 5
- 600 1200 l 5
- 600 1050 l 5
- 450 1050 l 5
- 450 1200 l 5
+575 1450 m 5,0,-1
+ 725 1450 l 5,1,-1
+ 725 1300 l 5,2,-1
+ 575 1300 l 5,3,-1
+ 575 1450 l 5,0,-1
+700 1200 m 5,4,-1
+ 850 1200 l 5,5,-1
+ 850 1050 l 5,6,-1
+ 700 1050 l 5,7,-1
+ 700 1200 l 5,4,-1
+450 1200 m 5,8,-1
+ 600 1200 l 5,9,-1
+ 600 1050 l 5,10,-1
+ 450 1050 l 5,11,-1
+ 450 1200 l 5,8,-1
 EndSplineSet
 Refer: 936 1581 N 1 0 0 1 0 0 2
 Validated: 1
@@ -52923,21 +52923,21 @@
 LayerCount: 2
 Fore
 SplineSet
-787 50 m 5
- 937 50 l 5
- 937 -100 l 5
- 787 -100 l 5
- 787 50 l 5
-912 300 m 5
- 1062 300 l 5
- 1062 150 l 5
- 912 150 l 5
- 912 300 l 5
-662 300 m 5
- 812 300 l 5
- 812 150 l 5
- 662 150 l 5
- 662 300 l 5
+787 50 m 5,0,-1
+ 937 50 l 5,1,-1
+ 937 -100 l 5,2,-1
+ 787 -100 l 5,3,-1
+ 787 50 l 5,0,-1
+912 300 m 5,4,-1
+ 1062 300 l 5,5,-1
+ 1062 150 l 5,6,-1
+ 912 150 l 5,7,-1
+ 912 300 l 5,4,-1
+662 300 m 5,8,-1
+ 812 300 l 5,9,-1
+ 812 150 l 5,10,-1
+ 662 150 l 5,11,-1
+ 662 300 l 5,8,-1
 EndSplineSet
 Refer: 936 1581 N 1 0 0 1 0 0 2
 Validated: 1
@@ -52950,26 +52950,26 @@
 LayerCount: 2
 Fore
 SplineSet
-912 75 m 5
- 1062 75 l 5
- 1062 -75 l 5
- 912 -75 l 5
- 912 75 l 5
-912 325 m 5
- 1062 325 l 5
- 1062 175 l 5
- 912 175 l 5
- 912 325 l 5
-662 75 m 5
- 812 75 l 5
- 812 -75 l 5
- 662 -75 l 5
- 662 75 l 5
-662 325 m 5
- 812 325 l 5
- 812 175 l 5
- 662 175 l 5
- 662 325 l 5
+912 75 m 5,0,-1
+ 1062 75 l 5,1,-1
+ 1062 -75 l 5,2,-1
+ 912 -75 l 5,3,-1
+ 912 75 l 5,0,-1
+912 325 m 5,4,-1
+ 1062 325 l 5,5,-1
+ 1062 175 l 5,6,-1
+ 912 175 l 5,7,-1
+ 912 325 l 5,4,-1
+662 75 m 5,8,-1
+ 812 75 l 5,9,-1
+ 812 -75 l 5,10,-1
+ 662 -75 l 5,11,-1
+ 662 75 l 5,8,-1
+662 325 m 5,12,-1
+ 812 325 l 5,13,-1
+ 812 175 l 5,14,-1
+ 662 175 l 5,15,-1
+ 662 325 l 5,12,-1
 EndSplineSet
 Refer: 936 1581 N 1 0 0 1 0 0 2
 Validated: 1
@@ -52993,24 +52993,24 @@
 LayerCount: 2
 Fore
 SplineSet
-597 -148 m 4
- 597 -108 597 -108 569 -80 c 4
- 541 -51 541 -51 500 -51 c 4
- 459 -51 459 -51 431 -79 c 4
- 403 -107 403 -107 403 -148 c 4
- 403 -190 403 -190 431 -218 c 4
- 459 -245 459 -245 500 -245 c 4
- 541 -245 541 -245 569 -217 c 4
- 597 -189 597 -189 597 -148 c 4
-719 -148 m 4
- 719 -240 719 -240 656 -304 c 4
- 592 -368 592 -368 500 -368 c 4
- 408 -368 408 -368 345 -304 c 4
- 281 -240 281 -240 281 -148 c 4
- 281 -56 281 -56 345 8 c 4
- 408 71 408 71 500 71 c 4
- 592 71 592 71 656 8 c 4
- 719 -56 719 -56 719 -148 c 4
+597 -148 m 4,0,1
+ 597 -108 597 -108 569 -80 c 4,2,3
+ 541 -51 541 -51 500 -51 c 4,4,5
+ 459 -51 459 -51 431 -79 c 4,6,7
+ 403 -107 403 -107 403 -148 c 4,8,9
+ 403 -190 403 -190 431 -218 c 4,10,11
+ 459 -245 459 -245 500 -245 c 4,12,13
+ 541 -245 541 -245 569 -217 c 4,14,15
+ 597 -189 597 -189 597 -148 c 4,0,1
+719 -148 m 4,16,17
+ 719 -240 719 -240 656 -304 c 4,18,19
+ 592 -368 592 -368 500 -368 c 4,20,21
+ 408 -368 408 -368 345 -304 c 4,22,23
+ 281 -240 281 -240 281 -148 c 4,24,25
+ 281 -56 281 -56 345 8 c 4,26,27
+ 408 71 408 71 500 71 c 4,28,29
+ 592 71 592 71 656 8 c 4,30,31
+ 719 -56 719 -56 719 -148 c 4,16,17
 EndSplineSet
 Refer: 938 1583 N 1 0 0 1 0 0 2
 Validated: 5
@@ -53023,11 +53023,11 @@
 LayerCount: 2
 Fore
 SplineSet
-425 -200 m 5
- 575 -200 l 5
- 575 -350 l 5
- 425 -350 l 5
- 425 -200 l 5
+425 -200 m 5,0,-1
+ 575 -200 l 5,1,-1
+ 575 -350 l 5,2,-1
+ 425 -350 l 5,3,-1
+ 425 -200 l 5,0,-1
 EndSplineSet
 Refer: 938 1583 N 1 0 0 1 0 0 2
 Validated: 1
@@ -53040,11 +53040,11 @@
 LayerCount: 2
 Fore
 SplineSet
-425 -200 m 5
- 575 -200 l 5
- 575 -350 l 5
- 425 -350 l 5
- 425 -200 l 5
+425 -200 m 5,0,-1
+ 575 -200 l 5,1,-1
+ 575 -350 l 5,2,-1
+ 425 -350 l 5,3,-1
+ 425 -200 l 5,0,-1
 EndSplineSet
 Refer: 921 1557 N 1 0 0 1 -62 -250 2
 Refer: 938 1583 N 1 0 0 1 0 0 2
@@ -53058,16 +53058,16 @@
 LayerCount: 2
 Fore
 SplineSet
-500 1200 m 5
- 650 1200 l 5
- 650 1050 l 5
- 500 1050 l 5
- 500 1200 l 5
-250 1200 m 5
- 400 1200 l 5
- 400 1050 l 5
- 250 1050 l 5
- 250 1200 l 5
+500 1200 m 5,0,-1
+ 650 1200 l 5,1,-1
+ 650 1050 l 5,2,-1
+ 500 1050 l 5,3,-1
+ 500 1200 l 5,0,-1
+250 1200 m 5,4,-1
+ 400 1200 l 5,5,-1
+ 400 1050 l 5,6,-1
+ 250 1050 l 5,7,-1
+ 250 1200 l 5,4,-1
 EndSplineSet
 Refer: 938 1583 N 1 0 0 1 0 0 2
 Validated: 1
@@ -53080,16 +53080,16 @@
 LayerCount: 2
 Fore
 SplineSet
-549 -150 m 5
- 699 -150 l 5
- 699 -300 l 5
- 549 -300 l 5
- 549 -150 l 5
-299 -150 m 5
- 449 -150 l 5
- 449 -300 l 5
- 299 -300 l 5
- 299 -150 l 5
+549 -150 m 5,0,-1
+ 699 -150 l 5,1,-1
+ 699 -300 l 5,2,-1
+ 549 -300 l 5,3,-1
+ 549 -150 l 5,0,-1
+299 -150 m 5,4,-1
+ 449 -150 l 5,5,-1
+ 449 -300 l 5,6,-1
+ 299 -300 l 5,7,-1
+ 299 -150 l 5,4,-1
 EndSplineSet
 Refer: 938 1583 N 1 0 0 1 0 0 2
 Validated: 1
@@ -53102,21 +53102,21 @@
 LayerCount: 2
 Fore
 SplineSet
-375 1450 m 5
- 525 1450 l 5
- 525 1300 l 5
- 375 1300 l 5
- 375 1450 l 5
-500 1200 m 5
- 650 1200 l 5
- 650 1050 l 5
- 500 1050 l 5
- 500 1200 l 5
-250 1200 m 5
- 400 1200 l 5
- 400 1050 l 5
- 250 1050 l 5
- 250 1200 l 5
+375 1450 m 5,0,-1
+ 525 1450 l 5,1,-1
+ 525 1300 l 5,2,-1
+ 375 1300 l 5,3,-1
+ 375 1450 l 5,0,-1
+500 1200 m 5,4,-1
+ 650 1200 l 5,5,-1
+ 650 1050 l 5,6,-1
+ 500 1050 l 5,7,-1
+ 500 1200 l 5,4,-1
+250 1200 m 5,8,-1
+ 400 1200 l 5,9,-1
+ 400 1050 l 5,10,-1
+ 250 1050 l 5,11,-1
+ 250 1200 l 5,8,-1
 EndSplineSet
 Refer: 938 1583 N 1 0 0 1 0 0 2
 Validated: 1
@@ -53129,21 +53129,21 @@
 LayerCount: 2
 Fore
 SplineSet
-375 1150 m 5
- 525 1150 l 5
- 525 1000 l 5
- 375 1000 l 5
- 375 1150 l 5
-500 1400 m 5
- 650 1400 l 5
- 650 1250 l 5
- 500 1250 l 5
- 500 1400 l 5
-250 1400 m 5
- 400 1400 l 5
- 400 1250 l 5
- 250 1250 l 5
- 250 1400 l 5
+375 1150 m 5,0,-1
+ 525 1150 l 5,1,-1
+ 525 1000 l 5,2,-1
+ 375 1000 l 5,3,-1
+ 375 1150 l 5,0,-1
+500 1400 m 5,4,-1
+ 650 1400 l 5,5,-1
+ 650 1250 l 5,6,-1
+ 500 1250 l 5,7,-1
+ 500 1400 l 5,4,-1
+250 1400 m 5,8,-1
+ 400 1400 l 5,9,-1
+ 400 1250 l 5,10,-1
+ 250 1250 l 5,11,-1
+ 250 1400 l 5,8,-1
 EndSplineSet
 Refer: 938 1583 N 1 0 0 1 0 0 2
 Validated: 1
@@ -53156,26 +53156,26 @@
 LayerCount: 2
 Fore
 SplineSet
-500 1200 m 5
- 650 1200 l 5
- 650 1050 l 5
- 500 1050 l 5
- 500 1200 l 5
-500 1450 m 5
- 650 1450 l 5
- 650 1300 l 5
- 500 1300 l 5
- 500 1450 l 5
-250 1200 m 5
- 400 1200 l 5
- 400 1050 l 5
- 250 1050 l 5
- 250 1200 l 5
-250 1450 m 5
- 400 1450 l 5
- 400 1300 l 5
- 250 1300 l 5
- 250 1450 l 5
+500 1200 m 5,0,-1
+ 650 1200 l 5,1,-1
+ 650 1050 l 5,2,-1
+ 500 1050 l 5,3,-1
+ 500 1200 l 5,0,-1
+500 1450 m 5,4,-1
+ 650 1450 l 5,5,-1
+ 650 1300 l 5,6,-1
+ 500 1300 l 5,7,-1
+ 500 1450 l 5,4,-1
+250 1200 m 5,8,-1
+ 400 1200 l 5,9,-1
+ 400 1050 l 5,10,-1
+ 250 1050 l 5,11,-1
+ 250 1200 l 5,8,-1
+250 1450 m 5,12,-1
+ 400 1450 l 5,13,-1
+ 400 1300 l 5,14,-1
+ 250 1300 l 5,15,-1
+ 250 1450 l 5,12,-1
 EndSplineSet
 Refer: 938 1583 N 1 0 0 1 0 0 2
 Validated: 1
@@ -53210,24 +53210,24 @@
 LayerCount: 2
 Fore
 SplineSet
-916 -280 m 4
- 916 -240 916 -240 888 -212 c 4
- 860 -183 860 -183 819 -183 c 4
- 778 -183 778 -183 750 -211 c 4
- 722 -239 722 -239 722 -280 c 4
- 722 -322 722 -322 750 -350 c 4
- 778 -377 778 -377 819 -377 c 4
- 860 -377 860 -377 888 -349 c 4
- 916 -321 916 -321 916 -280 c 4
-1038 -280 m 4
- 1038 -372 1038 -372 975 -436 c 4
- 911 -500 911 -500 819 -500 c 4
- 727 -500 727 -500 664 -436 c 4
- 600 -372 600 -372 600 -280 c 4
- 600 -188 600 -188 664 -124 c 4
- 727 -61 727 -61 819 -61 c 4
- 911 -61 911 -61 975 -124 c 4
- 1038 -188 1038 -188 1038 -280 c 4
+916 -280 m 4,0,1
+ 916 -240 916 -240 888 -212 c 4,2,3
+ 860 -183 860 -183 819 -183 c 4,4,5
+ 778 -183 778 -183 750 -211 c 4,6,7
+ 722 -239 722 -239 722 -280 c 4,8,9
+ 722 -322 722 -322 750 -350 c 4,10,11
+ 778 -377 778 -377 819 -377 c 4,12,13
+ 860 -377 860 -377 888 -349 c 4,14,15
+ 916 -321 916 -321 916 -280 c 4,0,1
+1038 -280 m 4,16,17
+ 1038 -372 1038 -372 975 -436 c 4,18,19
+ 911 -500 911 -500 819 -500 c 4,20,21
+ 727 -500 727 -500 664 -436 c 4,22,23
+ 600 -372 600 -372 600 -280 c 4,24,25
+ 600 -188 600 -188 664 -124 c 4,26,27
+ 727 -61 727 -61 819 -61 c 4,28,29
+ 911 -61 911 -61 975 -124 c 4,30,31
+ 1038 -188 1038 -188 1038 -280 c 4,16,17
 EndSplineSet
 Refer: 940 1585 N 1 0 0 1 0 0 2
 Validated: 5
@@ -53240,11 +53240,11 @@
 LayerCount: 2
 Fore
 SplineSet
-820 -290 m 5
- 970 -290 l 5
- 970 -440 l 5
- 820 -440 l 5
- 820 -290 l 5
+820 -290 m 5,0,-1
+ 970 -290 l 5,1,-1
+ 970 -440 l 5,2,-1
+ 820 -440 l 5,3,-1
+ 820 -290 l 5,0,-1
 EndSplineSet
 Refer: 940 1585 N 1 0 0 1 0 0 2
 Validated: 1
@@ -53268,16 +53268,16 @@
 LayerCount: 2
 Fore
 SplineSet
-180 190 m 5
- 330 190 l 5
- 330 40 l 5
- 180 40 l 5
- 180 190 l 5
-820 -290 m 5
- 970 -290 l 5
- 970 -440 l 5
- 820 -440 l 5
- 820 -290 l 5
+180 190 m 5,0,-1
+ 330 190 l 5,1,-1
+ 330 40 l 5,2,-1
+ 180 40 l 5,3,-1
+ 180 190 l 5,0,-1
+820 -290 m 5,4,-1
+ 970 -290 l 5,5,-1
+ 970 -440 l 5,6,-1
+ 820 -440 l 5,7,-1
+ 820 -290 l 5,4,-1
 EndSplineSet
 Refer: 940 1585 N 1 0 0 1 0 0 2
 Validated: 1
@@ -53290,16 +53290,16 @@
 LayerCount: 2
 Fore
 SplineSet
-750 950 m 5
- 900 950 l 5
- 900 800 l 5
- 750 800 l 5
- 750 950 l 5
-500 950 m 5
- 650 950 l 5
- 650 800 l 5
- 500 800 l 5
- 500 950 l 5
+750 950 m 5,0,-1
+ 900 950 l 5,1,-1
+ 900 800 l 5,2,-1
+ 750 800 l 5,3,-1
+ 750 950 l 5,0,-1
+500 950 m 5,4,-1
+ 650 950 l 5,5,-1
+ 650 800 l 5,6,-1
+ 500 800 l 5,7,-1
+ 500 950 l 5,4,-1
 EndSplineSet
 Refer: 940 1585 N 1 0 0 1 0 0 2
 Validated: 1
@@ -53312,21 +53312,21 @@
 LayerCount: 2
 Fore
 SplineSet
-625 1200 m 5
- 775 1200 l 5
- 775 1050 l 5
- 625 1050 l 5
- 625 1200 l 5
-750 950 m 5
- 900 950 l 5
- 900 800 l 5
- 750 800 l 5
- 750 950 l 5
-500 950 m 5
- 650 950 l 5
- 650 800 l 5
- 500 800 l 5
- 500 950 l 5
+625 1200 m 5,0,-1
+ 775 1200 l 5,1,-1
+ 775 1050 l 5,2,-1
+ 625 1050 l 5,3,-1
+ 625 1200 l 5,0,-1
+750 950 m 5,4,-1
+ 900 950 l 5,5,-1
+ 900 800 l 5,6,-1
+ 750 800 l 5,7,-1
+ 750 950 l 5,4,-1
+500 950 m 5,8,-1
+ 650 950 l 5,9,-1
+ 650 800 l 5,10,-1
+ 500 800 l 5,11,-1
+ 500 950 l 5,8,-1
 EndSplineSet
 Refer: 940 1585 N 1 0 0 1 0 0 2
 Validated: 1
@@ -53339,26 +53339,26 @@
 LayerCount: 2
 Fore
 SplineSet
-750 950 m 5
- 900 950 l 5
- 900 800 l 5
- 750 800 l 5
- 750 950 l 5
-750 1200 m 5
- 900 1200 l 5
- 900 1050 l 5
- 750 1050 l 5
- 750 1200 l 5
-500 950 m 5
- 650 950 l 5
- 650 800 l 5
- 500 800 l 5
- 500 950 l 5
-500 1200 m 5
- 650 1200 l 5
- 650 1050 l 5
- 500 1050 l 5
- 500 1200 l 5
+750 950 m 5,0,-1
+ 900 950 l 5,1,-1
+ 900 800 l 5,2,-1
+ 750 800 l 5,3,-1
+ 750 950 l 5,0,-1
+750 1200 m 5,4,-1
+ 900 1200 l 5,5,-1
+ 900 1050 l 5,6,-1
+ 750 1050 l 5,7,-1
+ 750 1200 l 5,4,-1
+500 950 m 5,8,-1
+ 650 950 l 5,9,-1
+ 650 800 l 5,10,-1
+ 500 800 l 5,11,-1
+ 500 950 l 5,8,-1
+500 1200 m 5,12,-1
+ 650 1200 l 5,13,-1
+ 650 1050 l 5,14,-1
+ 500 1050 l 5,15,-1
+ 500 1200 l 5,12,-1
 EndSplineSet
 Refer: 940 1585 N 1 0 0 1 0 0 2
 Validated: 1
@@ -53371,16 +53371,16 @@
 LayerCount: 2
 Fore
 SplineSet
-1525 -200 m 5
- 1675 -200 l 5
- 1675 -350 l 5
- 1525 -350 l 5
- 1525 -200 l 5
-1375 950 m 5
- 1525 950 l 5
- 1525 800 l 5
- 1375 800 l 5
- 1375 950 l 5
+1525 -200 m 5,0,-1
+ 1675 -200 l 5,1,-1
+ 1675 -350 l 5,2,-1
+ 1525 -350 l 5,3,-1
+ 1525 -200 l 5,0,-1
+1375 950 m 5,4,-1
+ 1525 950 l 5,5,-1
+ 1525 800 l 5,6,-1
+ 1375 800 l 5,7,-1
+ 1375 950 l 5,4,-1
 EndSplineSet
 Refer: 942 1587 N 1 0 0 1 0 0 2
 Validated: 1
@@ -53393,21 +53393,21 @@
 LayerCount: 2
 Fore
 SplineSet
-1525 -350 m 5
- 1675 -350 l 5
- 1675 -500 l 5
- 1525 -500 l 5
- 1525 -350 l 5
-1650 -100 m 5
- 1800 -100 l 5
- 1800 -250 l 5
- 1650 -250 l 5
- 1650 -100 l 5
-1400 -100 m 5
- 1550 -100 l 5
- 1550 -250 l 5
- 1400 -250 l 5
- 1400 -100 l 5
+1525 -350 m 5,0,-1
+ 1675 -350 l 5,1,-1
+ 1675 -500 l 5,2,-1
+ 1525 -500 l 5,3,-1
+ 1525 -350 l 5,0,-1
+1650 -100 m 5,4,-1
+ 1800 -100 l 5,5,-1
+ 1800 -250 l 5,6,-1
+ 1650 -250 l 5,7,-1
+ 1650 -100 l 5,4,-1
+1400 -100 m 5,8,-1
+ 1550 -100 l 5,9,-1
+ 1550 -250 l 5,10,-1
+ 1400 -250 l 5,11,-1
+ 1400 -100 l 5,8,-1
 EndSplineSet
 Refer: 942 1587 N 1 0 0 1 0 0 2
 Validated: 1
@@ -53420,36 +53420,36 @@
 LayerCount: 2
 Fore
 SplineSet
-1525 -350 m 5
- 1675 -350 l 5
- 1675 -500 l 5
- 1525 -500 l 5
- 1525 -350 l 5
-1650 -100 m 5
- 1800 -100 l 5
- 1800 -250 l 5
- 1650 -250 l 5
- 1650 -100 l 5
-1400 -100 m 5
- 1550 -100 l 5
- 1550 -250 l 5
- 1400 -250 l 5
- 1400 -100 l 5
-1375 1200 m 5
- 1525 1200 l 5
- 1525 1050 l 5
- 1375 1050 l 5
- 1375 1200 l 5
-1500 950 m 5
- 1650 950 l 5
- 1650 800 l 5
- 1500 800 l 5
- 1500 950 l 5
-1250 950 m 5
- 1400 950 l 5
- 1400 800 l 5
- 1250 800 l 5
- 1250 950 l 5
+1525 -350 m 5,0,-1
+ 1675 -350 l 5,1,-1
+ 1675 -500 l 5,2,-1
+ 1525 -500 l 5,3,-1
+ 1525 -350 l 5,0,-1
+1650 -100 m 5,4,-1
+ 1800 -100 l 5,5,-1
+ 1800 -250 l 5,6,-1
+ 1650 -250 l 5,7,-1
+ 1650 -100 l 5,4,-1
+1400 -100 m 5,8,-1
+ 1550 -100 l 5,9,-1
+ 1550 -250 l 5,10,-1
+ 1400 -250 l 5,11,-1
+ 1400 -100 l 5,8,-1
+1375 1200 m 5,12,-1
+ 1525 1200 l 5,13,-1
+ 1525 1050 l 5,14,-1
+ 1375 1050 l 5,15,-1
+ 1375 1200 l 5,12,-1
+1500 950 m 5,16,-1
+ 1650 950 l 5,17,-1
+ 1650 800 l 5,18,-1
+ 1500 800 l 5,19,-1
+ 1500 950 l 5,16,-1
+1250 950 m 5,20,-1
+ 1400 950 l 5,21,-1
+ 1400 800 l 5,22,-1
+ 1250 800 l 5,23,-1
+ 1250 950 l 5,20,-1
 EndSplineSet
 Refer: 942 1587 N 1 0 0 1 0 0 2
 Validated: 1
@@ -53462,16 +53462,16 @@
 LayerCount: 2
 Fore
 SplineSet
-1650 -200 m 5
- 1800 -200 l 5
- 1800 -350 l 5
- 1650 -350 l 5
- 1650 -200 l 5
-1400 -200 m 5
- 1550 -200 l 5
- 1550 -350 l 5
- 1400 -350 l 5
- 1400 -200 l 5
+1650 -200 m 5,0,-1
+ 1800 -200 l 5,1,-1
+ 1800 -350 l 5,2,-1
+ 1650 -350 l 5,3,-1
+ 1650 -200 l 5,0,-1
+1400 -200 m 5,4,-1
+ 1550 -200 l 5,5,-1
+ 1550 -350 l 5,6,-1
+ 1400 -350 l 5,7,-1
+ 1400 -200 l 5,4,-1
 EndSplineSet
 Refer: 944 1589 N 1 0 0 1 0 0 2
 Validated: 1
@@ -53484,21 +53484,21 @@
 LayerCount: 2
 Fore
 SplineSet
-1275 1200 m 5
- 1425 1200 l 5
- 1425 1050 l 5
- 1275 1050 l 5
- 1275 1200 l 5
-1400 950 m 5
- 1550 950 l 5
- 1550 800 l 5
- 1400 800 l 5
- 1400 950 l 5
-1150 950 m 5
- 1300 950 l 5
- 1300 800 l 5
- 1150 800 l 5
- 1150 950 l 5
+1275 1200 m 5,0,-1
+ 1425 1200 l 5,1,-1
+ 1425 1050 l 5,2,-1
+ 1275 1050 l 5,3,-1
+ 1275 1200 l 5,0,-1
+1400 950 m 5,4,-1
+ 1550 950 l 5,5,-1
+ 1550 800 l 5,6,-1
+ 1400 800 l 5,7,-1
+ 1400 950 l 5,4,-1
+1150 950 m 5,8,-1
+ 1300 950 l 5,9,-1
+ 1300 800 l 5,10,-1
+ 1150 800 l 5,11,-1
+ 1150 950 l 5,8,-1
 EndSplineSet
 Refer: 944 1589 N 1 0 0 1 0 0 2
 Validated: 1
@@ -53511,21 +53511,21 @@
 LayerCount: 2
 Fore
 SplineSet
-1025 1250 m 5
- 1175 1250 l 5
- 1175 1100 l 5
- 1025 1100 l 5
- 1025 1250 l 5
-1150 1000 m 5
- 1300 1000 l 5
- 1300 850 l 5
- 1150 850 l 5
- 1150 1000 l 5
-900 1000 m 5
- 1050 1000 l 5
- 1050 850 l 5
- 900 850 l 5
- 900 1000 l 5
+1025 1250 m 5,0,-1
+ 1175 1250 l 5,1,-1
+ 1175 1100 l 5,2,-1
+ 1025 1100 l 5,3,-1
+ 1025 1250 l 5,0,-1
+1150 1000 m 5,4,-1
+ 1300 1000 l 5,5,-1
+ 1300 850 l 5,6,-1
+ 1150 850 l 5,7,-1
+ 1150 1000 l 5,4,-1
+900 1000 m 5,8,-1
+ 1050 1000 l 5,9,-1
+ 1050 850 l 5,10,-1
+ 900 850 l 5,11,-1
+ 900 1000 l 5,8,-1
 EndSplineSet
 Refer: 946 1591 N 1 0 0 1 0 0 2
 Validated: 1
@@ -53538,21 +53538,21 @@
 LayerCount: 2
 Fore
 SplineSet
-425 1600 m 5
- 575 1600 l 5
- 575 1450 l 5
- 425 1450 l 5
- 425 1600 l 5
-550 1350 m 5
- 700 1350 l 5
- 700 1200 l 5
- 550 1200 l 5
- 550 1350 l 5
-300 1350 m 5
- 450 1350 l 5
- 450 1200 l 5
- 300 1200 l 5
- 300 1350 l 5
+425 1600 m 5,0,-1
+ 575 1600 l 5,1,-1
+ 575 1450 l 5,2,-1
+ 425 1450 l 5,3,-1
+ 425 1600 l 5,0,-1
+550 1350 m 5,4,-1
+ 700 1350 l 5,5,-1
+ 700 1200 l 5,6,-1
+ 550 1200 l 5,7,-1
+ 550 1350 l 5,4,-1
+300 1350 m 5,8,-1
+ 450 1350 l 5,9,-1
+ 450 1200 l 5,10,-1
+ 300 1200 l 5,11,-1
+ 300 1350 l 5,8,-1
 EndSplineSet
 Refer: 948 1593 N 1 0 0 1 0 0 2
 Validated: 1
@@ -53608,11 +53608,11 @@
 LayerCount: 2
 Fore
 SplineSet
-875 -200 m 5
- 1025 -200 l 5
- 1025 -350 l 5
- 875 -350 l 5
- 875 -200 l 5
+875 -200 m 5,0,-1
+ 1025 -200 l 5,1,-1
+ 1025 -350 l 5,2,-1
+ 875 -350 l 5,3,-1
+ 875 -200 l 5,0,-1
 EndSplineSet
 Refer: 1032 1697 N 1 0 0 1 0 0 2
 Validated: 1
@@ -53625,16 +53625,16 @@
 LayerCount: 2
 Fore
 SplineSet
-875 -200 m 5
- 1025 -200 l 5
- 1025 -350 l 5
- 875 -350 l 5
- 875 -200 l 5
-1525 1300 m 5
- 1675 1300 l 5
- 1675 1150 l 5
- 1525 1150 l 5
- 1525 1300 l 5
+875 -200 m 5,0,-1
+ 1025 -200 l 5,1,-1
+ 1025 -350 l 5,2,-1
+ 875 -350 l 5,3,-1
+ 875 -200 l 5,0,-1
+1525 1300 m 5,4,-1
+ 1675 1300 l 5,5,-1
+ 1675 1150 l 5,6,-1
+ 1525 1150 l 5,7,-1
+ 1525 1300 l 5,4,-1
 EndSplineSet
 Refer: 1032 1697 N 1 0 0 1 0 0 2
 Validated: 1
@@ -53647,21 +53647,21 @@
 LayerCount: 2
 Fore
 SplineSet
-1525 1550 m 5
- 1675 1550 l 5
- 1675 1400 l 5
- 1525 1400 l 5
- 1525 1550 l 5
-1650 1300 m 5
- 1800 1300 l 5
- 1800 1150 l 5
- 1650 1150 l 5
- 1650 1300 l 5
-1400 1300 m 5
- 1550 1300 l 5
- 1550 1150 l 5
- 1400 1150 l 5
- 1400 1300 l 5
+1525 1550 m 5,0,-1
+ 1675 1550 l 5,1,-1
+ 1675 1400 l 5,2,-1
+ 1525 1400 l 5,3,-1
+ 1525 1550 l 5,0,-1
+1650 1300 m 5,4,-1
+ 1800 1300 l 5,5,-1
+ 1800 1150 l 5,6,-1
+ 1650 1150 l 5,7,-1
+ 1650 1300 l 5,4,-1
+1400 1300 m 5,8,-1
+ 1550 1300 l 5,9,-1
+ 1550 1150 l 5,10,-1
+ 1400 1150 l 5,11,-1
+ 1400 1300 l 5,8,-1
 EndSplineSet
 Refer: 1032 1697 N 1 0 0 1 0 0 2
 Validated: 1
@@ -53674,21 +53674,21 @@
 LayerCount: 2
 Fore
 SplineSet
-875 -450 m 5
- 1025 -450 l 5
- 1025 -600 l 5
- 875 -600 l 5
- 875 -450 l 5
-1000 -200 m 5
- 1150 -200 l 5
- 1150 -350 l 5
- 1000 -350 l 5
- 1000 -200 l 5
-750 -200 m 5
- 900 -200 l 5
- 900 -350 l 5
- 750 -350 l 5
- 750 -200 l 5
+875 -450 m 5,0,-1
+ 1025 -450 l 5,1,-1
+ 1025 -600 l 5,2,-1
+ 875 -600 l 5,3,-1
+ 875 -450 l 5,0,-1
+1000 -200 m 5,4,-1
+ 1150 -200 l 5,5,-1
+ 1150 -350 l 5,6,-1
+ 1000 -350 l 5,7,-1
+ 1000 -200 l 5,4,-1
+750 -200 m 5,8,-1
+ 900 -200 l 5,9,-1
+ 900 -350 l 5,10,-1
+ 750 -350 l 5,11,-1
+ 750 -200 l 5,8,-1
 EndSplineSet
 Refer: 1032 1697 N 1 0 0 1 0 0 2
 Validated: 1
@@ -53701,26 +53701,26 @@
 LayerCount: 2
 Fore
 SplineSet
-1650 1300 m 5
- 1800 1300 l 5
- 1800 1150 l 5
- 1650 1150 l 5
- 1650 1300 l 5
-1650 1550 m 5
- 1800 1550 l 5
- 1800 1400 l 5
- 1650 1400 l 5
- 1650 1550 l 5
-1400 1300 m 5
- 1550 1300 l 5
- 1550 1150 l 5
- 1400 1150 l 5
- 1400 1300 l 5
-1400 1550 m 5
- 1550 1550 l 5
- 1550 1400 l 5
- 1400 1400 l 5
- 1400 1550 l 5
+1650 1300 m 5,0,-1
+ 1800 1300 l 5,1,-1
+ 1800 1150 l 5,2,-1
+ 1650 1150 l 5,3,-1
+ 1650 1300 l 5,0,-1
+1650 1550 m 5,4,-1
+ 1800 1550 l 5,5,-1
+ 1800 1400 l 5,6,-1
+ 1650 1400 l 5,7,-1
+ 1650 1550 l 5,4,-1
+1400 1300 m 5,8,-1
+ 1550 1300 l 5,9,-1
+ 1550 1150 l 5,10,-1
+ 1400 1150 l 5,11,-1
+ 1400 1300 l 5,8,-1
+1400 1550 m 5,12,-1
+ 1550 1550 l 5,13,-1
+ 1550 1400 l 5,14,-1
+ 1400 1400 l 5,15,-1
+ 1400 1550 l 5,12,-1
 EndSplineSet
 Refer: 1032 1697 N 1 0 0 1 0 0 2
 Validated: 1
@@ -53733,11 +53733,11 @@
 LayerCount: 2
 Fore
 SplineSet
-975 1300 m 5
- 1125 1300 l 5
- 1125 1150 l 5
- 975 1150 l 5
- 975 1300 l 5
+975 1300 m 5,0,-1
+ 1125 1300 l 5,1,-1
+ 1125 1150 l 5,2,-1
+ 975 1150 l 5,3,-1
+ 975 1300 l 5,0,-1
 EndSplineSet
 Refer: 989 1647 N 1 0 0 1 0 0 2
 Validated: 1
@@ -53750,21 +53750,21 @@
 LayerCount: 2
 Fore
 SplineSet
-975 1550 m 5
- 1125 1550 l 5
- 1125 1400 l 5
- 975 1400 l 5
- 975 1550 l 5
-1100 1300 m 5
- 1250 1300 l 5
- 1250 1150 l 5
- 1100 1150 l 5
- 1100 1300 l 5
-850 1300 m 5
- 1000 1300 l 5
- 1000 1150 l 5
- 850 1150 l 5
- 850 1300 l 5
+975 1550 m 5,0,-1
+ 1125 1550 l 5,1,-1
+ 1125 1400 l 5,2,-1
+ 975 1400 l 5,3,-1
+ 975 1550 l 5,0,-1
+1100 1300 m 5,4,-1
+ 1250 1300 l 5,5,-1
+ 1250 1150 l 5,6,-1
+ 1100 1150 l 5,7,-1
+ 1100 1300 l 5,4,-1
+850 1300 m 5,8,-1
+ 1000 1300 l 5,9,-1
+ 1000 1150 l 5,10,-1
+ 850 1150 l 5,11,-1
+ 850 1300 l 5,8,-1
 EndSplineSet
 Refer: 989 1647 N 1 0 0 1 0 0 2
 Validated: 1
@@ -53857,24 +53857,24 @@
 LayerCount: 2
 Fore
 SplineSet
-1666 1120 m 4
- 1666 1160 1666 1160 1638 1188 c 4
- 1610 1217 1610 1217 1569 1217 c 4
- 1528 1217 1528 1217 1500 1189 c 4
- 1472 1161 1472 1161 1472 1120 c 4
- 1472 1078 1472 1078 1500 1050 c 4
- 1528 1023 1528 1023 1569 1023 c 4
- 1610 1023 1610 1023 1638 1051 c 4
- 1666 1079 1666 1079 1666 1120 c 4
-1788 1120 m 4
- 1788 1028 1788 1028 1725 964 c 4
- 1661 900 1661 900 1569 900 c 4
- 1477 900 1477 900 1414 964 c 4
- 1350 1028 1350 1028 1350 1120 c 4
- 1350 1212 1350 1212 1414 1276 c 4
- 1477 1339 1477 1339 1569 1339 c 4
- 1661 1339 1661 1339 1725 1276 c 4
- 1788 1212 1788 1212 1788 1120 c 4
+1666 1120 m 4,0,1
+ 1666 1160 1666 1160 1638 1188 c 4,2,3
+ 1610 1217 1610 1217 1569 1217 c 4,4,5
+ 1528 1217 1528 1217 1500 1189 c 4,6,7
+ 1472 1161 1472 1161 1472 1120 c 4,8,9
+ 1472 1078 1472 1078 1500 1050 c 4,10,11
+ 1528 1023 1528 1023 1569 1023 c 4,12,13
+ 1610 1023 1610 1023 1638 1051 c 4,14,15
+ 1666 1079 1666 1079 1666 1120 c 4,0,1
+1788 1120 m 4,16,17
+ 1788 1028 1788 1028 1725 964 c 4,18,19
+ 1661 900 1661 900 1569 900 c 4,20,21
+ 1477 900 1477 900 1414 964 c 4,22,23
+ 1350 1028 1350 1028 1350 1120 c 4,24,25
+ 1350 1212 1350 1212 1414 1276 c 4,26,27
+ 1477 1339 1477 1339 1569 1339 c 4,28,29
+ 1661 1339 1661 1339 1725 1276 c 4,30,31
+ 1788 1212 1788 1212 1788 1120 c 4,16,17
 EndSplineSet
 Refer: 1040 1705 N 1 0 0 1 0 0 2
 Validated: 5
@@ -53887,11 +53887,11 @@
 LayerCount: 2
 Fore
 SplineSet
-750 1500 m 5
- 900 1500 l 5
- 900 1350 l 5
- 750 1350 l 5
- 750 1500 l 5
+750 1500 m 5,0,-1
+ 900 1500 l 5,1,-1
+ 900 1350 l 5,2,-1
+ 750 1350 l 5,3,-1
+ 750 1500 l 5,0,-1
 EndSplineSet
 Refer: 953 1603 N 1 0 0 1 0 0 2
 Validated: 1
@@ -53904,21 +53904,21 @@
 LayerCount: 2
 Fore
 SplineSet
-750 1750 m 5
- 900 1750 l 5
- 900 1600 l 5
- 750 1600 l 5
- 750 1750 l 5
-875 1500 m 5
- 1025 1500 l 5
- 1025 1350 l 5
- 875 1350 l 5
- 875 1500 l 5
-625 1500 m 5
- 775 1500 l 5
- 775 1350 l 5
- 625 1350 l 5
- 625 1500 l 5
+750 1750 m 5,0,-1
+ 900 1750 l 5,1,-1
+ 900 1600 l 5,2,-1
+ 750 1600 l 5,3,-1
+ 750 1750 l 5,0,-1
+875 1500 m 5,4,-1
+ 1025 1500 l 5,5,-1
+ 1025 1350 l 5,6,-1
+ 875 1350 l 5,7,-1
+ 875 1500 l 5,4,-1
+625 1500 m 5,8,-1
+ 775 1500 l 5,9,-1
+ 775 1350 l 5,10,-1
+ 625 1350 l 5,11,-1
+ 625 1500 l 5,8,-1
 EndSplineSet
 Refer: 953 1603 N 1 0 0 1 0 0 2
 Validated: 1
@@ -53931,21 +53931,21 @@
 LayerCount: 2
 Fore
 SplineSet
-725 -450 m 5
- 875 -450 l 5
- 875 -600 l 5
- 725 -600 l 5
- 725 -450 l 5
-850 -200 m 5
- 1000 -200 l 5
- 1000 -350 l 5
- 850 -350 l 5
- 850 -200 l 5
-600 -200 m 5
- 750 -200 l 5
- 750 -350 l 5
- 600 -350 l 5
- 600 -200 l 5
+725 -450 m 5,0,-1
+ 875 -450 l 5,1,-1
+ 875 -600 l 5,2,-1
+ 725 -600 l 5,3,-1
+ 725 -450 l 5,0,-1
+850 -200 m 5,4,-1
+ 1000 -200 l 5,5,-1
+ 1000 -350 l 5,6,-1
+ 850 -350 l 5,7,-1
+ 850 -200 l 5,4,-1
+600 -200 m 5,8,-1
+ 750 -200 l 5,9,-1
+ 750 -350 l 5,10,-1
+ 600 -350 l 5,11,-1
+ 600 -200 l 5,8,-1
 EndSplineSet
 Refer: 953 1603 N 1 0 0 1 0 0 2
 Validated: 1
@@ -53958,11 +53958,11 @@
 LayerCount: 2
 Fore
 SplineSet
-1833 1685 m 29
- 970 1331 l 29
- 970 1481 l 29
- 1833 1835 l 29
- 1833 1685 l 29
+1833 1685 m 29,0,-1
+ 970 1331 l 29,1,-1
+ 970 1481 l 29,2,-1
+ 1833 1835 l 29,3,-1
+ 1833 1685 l 29,0,-1
 EndSplineSet
 Refer: 1040 1705 N 1 0 0 1 0 0 2
 Validated: 1
@@ -53975,24 +53975,24 @@
 LayerCount: 2
 Fore
 SplineSet
-1666 1120 m 4
- 1666 1160 1666 1160 1638 1188 c 4
- 1610 1217 1610 1217 1569 1217 c 4
- 1528 1217 1528 1217 1500 1189 c 4
- 1472 1161 1472 1161 1472 1120 c 4
- 1472 1078 1472 1078 1500 1050 c 4
- 1528 1023 1528 1023 1569 1023 c 4
- 1610 1023 1610 1023 1638 1051 c 4
- 1666 1079 1666 1079 1666 1120 c 4
-1788 1120 m 4
- 1788 1028 1788 1028 1725 964 c 4
- 1661 900 1661 900 1569 900 c 4
- 1477 900 1477 900 1414 964 c 4
- 1350 1028 1350 1028 1350 1120 c 4
- 1350 1212 1350 1212 1414 1276 c 4
- 1477 1339 1477 1339 1569 1339 c 4
- 1661 1339 1661 1339 1725 1276 c 4
- 1788 1212 1788 1212 1788 1120 c 4
+1666 1120 m 4,0,1
+ 1666 1160 1666 1160 1638 1188 c 4,2,3
+ 1610 1217 1610 1217 1569 1217 c 4,4,5
+ 1528 1217 1528 1217 1500 1189 c 4,6,7
+ 1472 1161 1472 1161 1472 1120 c 4,8,9
+ 1472 1078 1472 1078 1500 1050 c 4,10,11
+ 1528 1023 1528 1023 1569 1023 c 4,12,13
+ 1610 1023 1610 1023 1638 1051 c 4,14,15
+ 1666 1079 1666 1079 1666 1120 c 4,0,1
+1788 1120 m 4,16,17
+ 1788 1028 1788 1028 1725 964 c 4,18,19
+ 1661 900 1661 900 1569 900 c 4,20,21
+ 1477 900 1477 900 1414 964 c 4,22,23
+ 1350 1028 1350 1028 1350 1120 c 4,24,25
+ 1350 1212 1350 1212 1414 1276 c 4,26,27
+ 1477 1339 1477 1339 1569 1339 c 4,28,29
+ 1661 1339 1661 1339 1725 1276 c 4,30,31
+ 1788 1212 1788 1212 1788 1120 c 4,16,17
 EndSplineSet
 Refer: 1046 1711 N 1 0 0 1 0 0 2
 Validated: 5
@@ -54005,16 +54005,16 @@
 LayerCount: 2
 Fore
 SplineSet
-1150 1850 m 5
- 1300 1850 l 5
- 1300 1700 l 5
- 1150 1700 l 5
- 1150 1850 l 5
-900 1850 m 5
- 1050 1850 l 5
- 1050 1700 l 5
- 900 1700 l 5
- 900 1850 l 5
+1150 1850 m 5,0,-1
+ 1300 1850 l 5,1,-1
+ 1300 1700 l 5,2,-1
+ 1150 1700 l 5,3,-1
+ 1150 1850 l 5,0,-1
+900 1850 m 5,4,-1
+ 1050 1850 l 5,5,-1
+ 1050 1700 l 5,6,-1
+ 900 1700 l 5,7,-1
+ 900 1850 l 5,4,-1
 EndSplineSet
 Refer: 1046 1711 N 1 0 0 1 0 0 2
 Validated: 1
@@ -54027,16 +54027,16 @@
 LayerCount: 2
 Fore
 SplineSet
-850 -200 m 5
- 1000 -200 l 5
- 1000 -350 l 5
- 850 -350 l 5
- 850 -200 l 5
-600 -200 m 5
- 750 -200 l 5
- 750 -350 l 5
- 600 -350 l 5
- 600 -200 l 5
+850 -200 m 5,0,-1
+ 1000 -200 l 5,1,-1
+ 1000 -350 l 5,2,-1
+ 850 -350 l 5,3,-1
+ 850 -200 l 5,0,-1
+600 -200 m 5,4,-1
+ 750 -200 l 5,5,-1
+ 750 -350 l 5,6,-1
+ 600 -350 l 5,7,-1
+ 600 -200 l 5,4,-1
 EndSplineSet
 Refer: 1046 1711 N 1 0 0 1 0 0 2
 Validated: 1
@@ -54049,16 +54049,16 @@
 LayerCount: 2
 Fore
 SplineSet
-725 -450 m 5
- 875 -450 l 5
- 875 -600 l 5
- 725 -600 l 5
- 725 -450 l 5
-725 -200 m 5
- 875 -200 l 5
- 875 -350 l 5
- 725 -350 l 5
- 725 -200 l 5
+725 -450 m 5,0,-1
+ 875 -450 l 5,1,-1
+ 875 -600 l 5,2,-1
+ 725 -600 l 5,3,-1
+ 725 -450 l 5,0,-1
+725 -200 m 5,4,-1
+ 875 -200 l 5,5,-1
+ 875 -350 l 5,6,-1
+ 725 -350 l 5,7,-1
+ 725 -200 l 5,4,-1
 EndSplineSet
 Refer: 1046 1711 N 1 0 0 1 0 0 2
 Validated: 1
@@ -54071,21 +54071,21 @@
 LayerCount: 2
 Fore
 SplineSet
-1025 2100 m 5
- 1175 2100 l 5
- 1175 1950 l 5
- 1025 1950 l 5
- 1025 2100 l 5
-1150 1850 m 5
- 1300 1850 l 5
- 1300 1700 l 5
- 1150 1700 l 5
- 1150 1850 l 5
-900 1850 m 5
- 1050 1850 l 5
- 1050 1700 l 5
- 900 1700 l 5
- 900 1850 l 5
+1025 2100 m 5,0,-1
+ 1175 2100 l 5,1,-1
+ 1175 1950 l 5,2,-1
+ 1025 1950 l 5,3,-1
+ 1025 2100 l 5,0,-1
+1150 1850 m 5,4,-1
+ 1300 1850 l 5,5,-1
+ 1300 1700 l 5,6,-1
+ 1150 1700 l 5,7,-1
+ 1150 1850 l 5,4,-1
+900 1850 m 5,8,-1
+ 1050 1850 l 5,9,-1
+ 1050 1700 l 5,10,-1
+ 900 1700 l 5,11,-1
+ 900 1850 l 5,8,-1
 EndSplineSet
 Refer: 1046 1711 N 1 0 0 1 0 0 2
 Validated: 1
@@ -54109,11 +54109,11 @@
 LayerCount: 2
 Fore
 SplineSet
-1130 1950 m 5
- 1280 1950 l 5
- 1280 1800 l 5
- 1130 1800 l 5
- 1130 1950 l 5
+1130 1950 m 5,0,-1
+ 1280 1950 l 5,1,-1
+ 1280 1800 l 5,2,-1
+ 1130 1800 l 5,3,-1
+ 1130 1950 l 5,0,-1
 EndSplineSet
 Refer: 954 1604 N 1 0 0 1 0 0 2
 Validated: 1
@@ -54126,21 +54126,21 @@
 LayerCount: 2
 Fore
 SplineSet
-1125 2100 m 5
- 1275 2100 l 5
- 1275 1950 l 5
- 1125 1950 l 5
- 1125 2100 l 5
-1250 1850 m 5
- 1400 1850 l 5
- 1400 1700 l 5
- 1250 1700 l 5
- 1250 1850 l 5
-1000 1850 m 5
- 1150 1850 l 5
- 1150 1700 l 5
- 1000 1700 l 5
- 1000 1850 l 5
+1125 2100 m 5,0,-1
+ 1275 2100 l 5,1,-1
+ 1275 1950 l 5,2,-1
+ 1125 1950 l 5,3,-1
+ 1125 2100 l 5,0,-1
+1250 1850 m 5,4,-1
+ 1400 1850 l 5,5,-1
+ 1400 1700 l 5,6,-1
+ 1250 1700 l 5,7,-1
+ 1250 1850 l 5,4,-1
+1000 1850 m 5,8,-1
+ 1150 1850 l 5,9,-1
+ 1150 1700 l 5,10,-1
+ 1000 1700 l 5,11,-1
+ 1000 1850 l 5,8,-1
 EndSplineSet
 Refer: 954 1604 N 1 0 0 1 0 0 2
 Validated: 1
@@ -54153,21 +54153,21 @@
 LayerCount: 2
 Fore
 SplineSet
-675 -650 m 5
- 825 -650 l 5
- 825 -800 l 5
- 675 -800 l 5
- 675 -650 l 5
-800 -400 m 5
- 950 -400 l 5
- 950 -550 l 5
- 800 -550 l 5
- 800 -400 l 5
-550 -400 m 5
- 700 -400 l 5
- 700 -550 l 5
- 550 -550 l 5
- 550 -400 l 5
+675 -650 m 5,0,-1
+ 825 -650 l 5,1,-1
+ 825 -800 l 5,2,-1
+ 675 -800 l 5,3,-1
+ 675 -650 l 5,0,-1
+800 -400 m 5,4,-1
+ 950 -400 l 5,5,-1
+ 950 -550 l 5,6,-1
+ 800 -550 l 5,7,-1
+ 800 -400 l 5,4,-1
+550 -400 m 5,8,-1
+ 700 -400 l 5,9,-1
+ 700 -550 l 5,10,-1
+ 550 -550 l 5,11,-1
+ 550 -400 l 5,8,-1
 EndSplineSet
 Refer: 954 1604 N 1 0 0 1 0 0 2
 Validated: 1
@@ -54180,16 +54180,16 @@
 LayerCount: 2
 Fore
 SplineSet
-700 -500 m 5
- 850 -500 l 5
- 850 -650 l 5
- 700 -650 l 5
- 700 -500 l 5
-575 950 m 5
- 725 950 l 5
- 725 800 l 5
- 575 800 l 5
- 575 950 l 5
+700 -500 m 5,0,-1
+ 850 -500 l 5,1,-1
+ 850 -650 l 5,2,-1
+ 700 -650 l 5,3,-1
+ 700 -500 l 5,0,-1
+575 950 m 5,4,-1
+ 725 950 l 5,5,-1
+ 725 800 l 5,6,-1
+ 575 800 l 5,7,-1
+ 575 950 l 5,4,-1
 EndSplineSet
 Refer: 1057 1722 N 1 0 0 1 0 0 2
 Validated: 1
@@ -54241,29 +54241,29 @@
 LayerCount: 2
 Fore
 SplineSet
-866 -455 m 4
- 866 -415 866 -415 838 -387 c 4
- 810 -358 810 -358 769 -358 c 4
- 728 -358 728 -358 700 -386 c 4
- 672 -414 672 -414 672 -455 c 4
- 672 -497 672 -497 700 -525 c 4
- 728 -552 728 -552 769 -552 c 4
- 810 -552 810 -552 838 -524 c 4
- 866 -496 866 -496 866 -455 c 4
-988 -455 m 4
- 988 -547 988 -547 925 -611 c 4
- 861 -675 861 -675 769 -675 c 4
- 677 -675 677 -675 614 -611 c 4
- 550 -547 550 -547 550 -455 c 4
- 550 -363 550 -363 614 -299 c 4
- 677 -236 677 -236 769 -236 c 4
- 861 -236 861 -236 925 -299 c 4
- 988 -363 988 -363 988 -455 c 4
-575 950 m 5
- 725 950 l 5
- 725 800 l 5
- 575 800 l 5
- 575 950 l 5
+866 -455 m 4,0,1
+ 866 -415 866 -415 838 -387 c 4,2,3
+ 810 -358 810 -358 769 -358 c 4,4,5
+ 728 -358 728 -358 700 -386 c 4,6,7
+ 672 -414 672 -414 672 -455 c 4,8,9
+ 672 -497 672 -497 700 -525 c 4,10,11
+ 728 -552 728 -552 769 -552 c 4,12,13
+ 810 -552 810 -552 838 -524 c 4,14,15
+ 866 -496 866 -496 866 -455 c 4,0,1
+988 -455 m 4,16,17
+ 988 -547 988 -547 925 -611 c 4,18,19
+ 861 -675 861 -675 769 -675 c 4,20,21
+ 677 -675 677 -675 614 -611 c 4,22,23
+ 550 -547 550 -547 550 -455 c 4,24,25
+ 550 -363 550 -363 614 -299 c 4,26,27
+ 677 -236 677 -236 769 -236 c 4,28,29
+ 861 -236 861 -236 925 -299 c 4,30,31
+ 988 -363 988 -363 988 -455 c 4,16,17
+575 950 m 5,32,-1
+ 725 950 l 5,33,-1
+ 725 800 l 5,34,-1
+ 575 800 l 5,35,-1
+ 575 950 l 5,32,-1
 EndSplineSet
 Refer: 1057 1722 N 1 0 0 1 0 0 2
 Validated: 5
@@ -54276,21 +54276,21 @@
 LayerCount: 2
 Fore
 SplineSet
-625 1200 m 5
- 775 1200 l 5
- 775 1050 l 5
- 625 1050 l 5
- 625 1200 l 5
-750 950 m 5
- 900 950 l 5
- 900 800 l 5
- 750 800 l 5
- 750 950 l 5
-500 950 m 5
- 650 950 l 5
- 650 800 l 5
- 500 800 l 5
- 500 950 l 5
+625 1200 m 5,0,-1
+ 775 1200 l 5,1,-1
+ 775 1050 l 5,2,-1
+ 625 1050 l 5,3,-1
+ 625 1200 l 5,0,-1
+750 950 m 5,4,-1
+ 900 950 l 5,5,-1
+ 900 800 l 5,6,-1
+ 750 800 l 5,7,-1
+ 750 950 l 5,4,-1
+500 950 m 5,8,-1
+ 650 950 l 5,9,-1
+ 650 800 l 5,10,-1
+ 500 800 l 5,11,-1
+ 500 950 l 5,8,-1
 EndSplineSet
 Refer: 1057 1722 N 1 0 0 1 0 0 2
 Validated: 1
@@ -54354,26 +54354,26 @@
 LayerCount: 2
 Fore
 SplineSet
-575 1200 m 5
- 725 1200 l 5
- 725 1050 l 5
- 575 1050 l 5
- 575 1200 l 5
-787 50 m 5
- 937 50 l 5
- 937 -100 l 5
- 787 -100 l 5
- 787 50 l 5
-912 300 m 5
- 1062 300 l 5
- 1062 150 l 5
- 912 150 l 5
- 912 300 l 5
-662 300 m 5
- 812 300 l 5
- 812 150 l 5
- 662 150 l 5
- 662 300 l 5
+575 1200 m 5,0,-1
+ 725 1200 l 5,1,-1
+ 725 1050 l 5,2,-1
+ 575 1050 l 5,3,-1
+ 575 1200 l 5,0,-1
+787 50 m 5,4,-1
+ 937 50 l 5,5,-1
+ 937 -100 l 5,6,-1
+ 787 -100 l 5,7,-1
+ 787 50 l 5,4,-1
+912 300 m 5,8,-1
+ 1062 300 l 5,9,-1
+ 1062 150 l 5,10,-1
+ 912 150 l 5,11,-1
+ 912 300 l 5,8,-1
+662 300 m 5,12,-1
+ 812 300 l 5,13,-1
+ 812 150 l 5,14,-1
+ 662 150 l 5,15,-1
+ 662 300 l 5,12,-1
 EndSplineSet
 Refer: 936 1581 N 1 0 0 1 0 0 2
 Validated: 1
@@ -55190,11 +55190,11 @@
 LayerCount: 2
 Fore
 SplineSet
-317 1840 m 5
- 915 1840 l 5
- 915 1692 l 5
- 317 1692 l 5
- 317 1840 l 5
+317 1840 m 5,0,-1
+ 915 1840 l 5,1,-1
+ 915 1692 l 5,2,-1
+ 317 1692 l 5,3,-1
+ 317 1840 l 5,0,-1
 EndSplineSet
 Refer: 36 65 N 1 0 0 1 0 0 2
 EndChar
@@ -55206,11 +55206,11 @@
 LayerCount: 2
 Fore
 SplineSet
-317 1526 m 5
- 915 1526 l 5
- 915 1378 l 5
- 317 1378 l 5
- 317 1526 l 5
+317 1526 m 5,0,-1
+ 915 1526 l 5,1,-1
+ 915 1378 l 5,2,-1
+ 317 1378 l 5,3,-1
+ 317 1526 l 5,0,-1
 EndSplineSet
 Refer: 68 97 N 1 0 0 1 0 0 2
 EndChar
@@ -55222,17 +55222,17 @@
 LayerCount: 2
 Fore
 SplineSet
-303 1901 m 5
- 422 1901 l 5
- 434 1847 434 1847 484 1818.5 c 4
- 534 1790 534 1790 616 1790 c 4
- 699 1790 699 1790 747.5 1817.5 c 4
- 796 1845 796 1845 811 1901 c 5
- 930 1901 l 5
- 919 1782 919 1782 839.5 1720.5 c 4
- 760 1659 760 1659 616 1659 c 260
- 472 1659 472 1659 393 1720 c 4
- 314 1781 314 1781 303 1901 c 5
+303 1901 m 5,0,-1
+ 422 1901 l 5,1,2
+ 434 1847 434 1847 484 1818.5 c 4,3,4
+ 534 1790 534 1790 616 1790 c 4,5,6
+ 699 1790 699 1790 747.5 1817.5 c 4,7,8
+ 796 1845 796 1845 811 1901 c 5,9,-1
+ 930 1901 l 5,10,11
+ 919 1782 919 1782 839.5 1720.5 c 4,12,13
+ 760 1659 760 1659 616 1659 c 260,14,15
+ 472 1659 472 1659 393 1720 c 4,16,17
+ 314 1781 314 1781 303 1901 c 5,0,-1
 EndSplineSet
 Refer: 36 65 N 1 0 0 1 0 0 2
 EndChar
@@ -55244,17 +55244,17 @@
 LayerCount: 2
 Fore
 SplineSet
-303 1608 m 5
- 422 1608 l 5
- 433 1532 433 1532 481 1495 c 4
- 529 1458 529 1458 616 1458 c 4
- 701 1458 701 1458 749 1495 c 4
- 797 1532 797 1532 811 1608 c 5
- 930 1608 l 5
- 919 1465 919 1465 840 1393 c 4
- 761 1321 761 1321 616 1321 c 4
- 472 1321 472 1321 393 1393 c 4
- 314 1465 314 1465 303 1608 c 5
+303 1608 m 5,0,-1
+ 422 1608 l 5,1,2
+ 433 1532 433 1532 481 1495 c 4,3,4
+ 529 1458 529 1458 616 1458 c 4,5,6
+ 701 1458 701 1458 749 1495 c 4,7,8
+ 797 1532 797 1532 811 1608 c 5,9,-1
+ 930 1608 l 5,10,11
+ 919 1465 919 1465 840 1393 c 4,12,13
+ 761 1321 761 1321 616 1321 c 4,14,15
+ 472 1321 472 1321 393 1393 c 4,16,17
+ 314 1465 314 1465 303 1608 c 5,0,-1
 EndSplineSet
 Refer: 68 97 N 1 0 0 1 0 0 2
 EndChar
@@ -55286,14 +55286,14 @@
 LayerCount: 2
 Fore
 SplineSet
-648 1908 m 5
- 837 1908 l 5
- 1048 1642 l 5
- 908 1642 l 5
- 742 1820 l 5
- 577 1642 l 5
- 437 1642 l 5
- 648 1908 l 5
+648 1908 m 5,0,-1
+ 837 1908 l 5,1,-1
+ 1048 1642 l 5,2,-1
+ 908 1642 l 5,3,-1
+ 742 1820 l 5,4,-1
+ 577 1642 l 5,5,-1
+ 437 1642 l 5,6,-1
+ 648 1908 l 5,0,-1
 EndSplineSet
 Refer: 38 67 N 1 0 0 1 0 0 2
 EndChar
@@ -55315,11 +55315,11 @@
 LayerCount: 2
 Fore
 SplineSet
-588 1872 m 5
- 793 1872 l 5
- 793 1667 l 5
- 588 1667 l 5
- 588 1872 l 5
+588 1872 m 5,0,-1
+ 793 1872 l 5,1,-1
+ 793 1667 l 5,2,-1
+ 588 1667 l 5,3,-1
+ 588 1872 l 5,0,-1
 EndSplineSet
 Refer: 38 67 N 1 0 0 1 0 0 2
 EndChar
@@ -55331,11 +55331,11 @@
 LayerCount: 2
 Fore
 SplineSet
-588 1552 m 5
- 793 1552 l 5
- 793 1348 l 5
- 588 1348 l 5
- 588 1552 l 5
+588 1552 m 5,0,-1
+ 793 1552 l 5,1,-1
+ 793 1348 l 5,2,-1
+ 588 1348 l 5,3,-1
+ 588 1552 l 5,0,-1
 EndSplineSet
 Refer: 70 99 N 1 0 0 1 0 0 2
 EndChar
@@ -55347,14 +55347,14 @@
 LayerCount: 2
 Fore
 SplineSet
-444 1629 m 5
- 233 1895 l 5
- 373 1895 l 5
- 538 1717 l 5
- 704 1895 l 5
- 844 1895 l 5
- 633 1629 l 5
- 444 1629 l 5
+444 1629 m 5,0,-1
+ 233 1895 l 5,1,-1
+ 373 1895 l 5,2,-1
+ 538 1717 l 5,3,-1
+ 704 1895 l 5,4,-1
+ 844 1895 l 5,5,-1
+ 633 1629 l 5,6,-1
+ 444 1629 l 5,0,-1
 EndSplineSet
 Refer: 39 68 N 1 0 0 1 0 0 2
 EndChar
@@ -55366,11 +55366,11 @@
 LayerCount: 2
 Fore
 SplineSet
-1114 1557 m 5
- 1312 1557 l 5
- 1199 1181 l 5
- 1045 1181 l 5
- 1114 1557 l 5
+1114 1557 m 5,0,-1
+ 1312 1557 l 5,1,-1
+ 1199 1181 l 5,2,-1
+ 1045 1181 l 5,3,-1
+ 1114 1557 l 5,0,-1
 EndSplineSet
 Refer: 71 100 N 1 0 0 1 0 0 2
 EndChar
@@ -55391,11 +55391,11 @@
 LayerCount: 2
 Fore
 SplineSet
-335 1840 m 5
- 933 1840 l 5
- 933 1692 l 5
- 335 1692 l 5
- 335 1840 l 5
+335 1840 m 5,0,-1
+ 933 1840 l 5,1,-1
+ 933 1692 l 5,2,-1
+ 335 1692 l 5,3,-1
+ 335 1840 l 5,0,-1
 EndSplineSet
 Refer: 40 69 N 1 0 0 1 0 0 2
 EndChar
@@ -55407,11 +55407,11 @@
 LayerCount: 2
 Fore
 SplineSet
-352 1526 m 5
- 950 1526 l 5
- 950 1378 l 5
- 352 1378 l 5
- 352 1526 l 5
+352 1526 m 5,0,-1
+ 950 1526 l 5,1,-1
+ 950 1378 l 5,2,-1
+ 352 1378 l 5,3,-1
+ 352 1526 l 5,0,-1
 EndSplineSet
 Refer: 72 101 N 1 0 0 1 0 0 2
 EndChar
@@ -55423,17 +55423,17 @@
 LayerCount: 2
 Fore
 SplineSet
-321 1901 m 5
- 440 1901 l 5
- 452 1847 452 1847 502 1818.5 c 4
- 552 1790 552 1790 634 1790 c 4
- 717 1790 717 1790 765.5 1817.5 c 4
- 814 1845 814 1845 829 1901 c 5
- 948 1901 l 5
- 937 1782 937 1782 857.5 1720.5 c 4
- 778 1659 778 1659 634 1659 c 260
- 490 1659 490 1659 411 1720 c 4
- 332 1781 332 1781 321 1901 c 5
+321 1901 m 5,0,-1
+ 440 1901 l 5,1,2
+ 452 1847 452 1847 502 1818.5 c 4,3,4
+ 552 1790 552 1790 634 1790 c 4,5,6
+ 717 1790 717 1790 765.5 1817.5 c 4,7,8
+ 814 1845 814 1845 829 1901 c 5,9,-1
+ 948 1901 l 5,10,11
+ 937 1782 937 1782 857.5 1720.5 c 4,12,13
+ 778 1659 778 1659 634 1659 c 260,14,15
+ 490 1659 490 1659 411 1720 c 4,16,17
+ 332 1781 332 1781 321 1901 c 5,0,-1
 EndSplineSet
 Refer: 40 69 N 1 0 0 1 0 0 2
 EndChar
@@ -55445,17 +55445,17 @@
 LayerCount: 2
 Fore
 SplineSet
-317 1608 m 5
- 436 1608 l 5
- 447 1532 447 1532 495 1495 c 4
- 543 1458 543 1458 630 1458 c 4
- 715 1458 715 1458 763 1495 c 4
- 811 1532 811 1532 825 1608 c 5
- 944 1608 l 5
- 933 1465 933 1465 854 1393 c 4
- 775 1321 775 1321 630 1321 c 4
- 486 1321 486 1321 407 1393 c 4
- 328 1465 328 1465 317 1608 c 5
+317 1608 m 5,0,-1
+ 436 1608 l 5,1,2
+ 447 1532 447 1532 495 1495 c 4,3,4
+ 543 1458 543 1458 630 1458 c 4,5,6
+ 715 1458 715 1458 763 1495 c 4,7,8
+ 811 1532 811 1532 825 1608 c 5,9,-1
+ 944 1608 l 5,10,11
+ 933 1465 933 1465 854 1393 c 4,12,13
+ 775 1321 775 1321 630 1321 c 4,14,15
+ 486 1321 486 1321 407 1393 c 4,16,17
+ 328 1465 328 1465 317 1608 c 5,0,-1
 EndSplineSet
 Refer: 72 101 N 1 0 0 1 0 0 2
 EndChar
@@ -55467,11 +55467,11 @@
 LayerCount: 2
 Fore
 SplineSet
-531 1872 m 5
- 736 1872 l 5
- 736 1667 l 5
- 531 1667 l 5
- 531 1872 l 5
+531 1872 m 5,0,-1
+ 736 1872 l 5,1,-1
+ 736 1667 l 5,2,-1
+ 531 1667 l 5,3,-1
+ 531 1872 l 5,0,-1
 EndSplineSet
 Refer: 40 69 N 1 0 0 1 0 0 2
 EndChar
@@ -55483,11 +55483,11 @@
 LayerCount: 2
 Fore
 SplineSet
-527 1552 m 5
- 732 1552 l 5
- 732 1348 l 5
- 527 1348 l 5
- 527 1552 l 5
+527 1552 m 5,0,-1
+ 732 1552 l 5,1,-1
+ 732 1348 l 5,2,-1
+ 527 1348 l 5,3,-1
+ 527 1552 l 5,0,-1
 EndSplineSet
 Refer: 72 101 N 1 0 0 1 0 0 2
 EndChar
@@ -55519,14 +55519,14 @@
 LayerCount: 2
 Fore
 SplineSet
-558 1629 m 5
- 347 1895 l 5
- 487 1895 l 5
- 652 1717 l 5
- 818 1895 l 5
- 958 1895 l 5
- 747 1629 l 5
- 558 1629 l 5
+558 1629 m 5,0,-1
+ 347 1895 l 5,1,-1
+ 487 1895 l 5,2,-1
+ 652 1717 l 5,3,-1
+ 818 1895 l 5,4,-1
+ 958 1895 l 5,5,-1
+ 747 1629 l 5,6,-1
+ 558 1629 l 5,0,-1
 EndSplineSet
 Refer: 40 69 N 1 0 0 1 0 0 2
 EndChar
@@ -55548,14 +55548,14 @@
 LayerCount: 2
 Fore
 SplineSet
-522 1901 m 5
- 711 1901 l 5
- 922 1635 l 5
- 782 1635 l 5
- 616 1813 l 5
- 451 1635 l 5
- 311 1635 l 5
- 522 1901 l 5
+522 1901 m 5,0,-1
+ 711 1901 l 5,1,-1
+ 922 1635 l 5,2,-1
+ 782 1635 l 5,3,-1
+ 616 1813 l 5,4,-1
+ 451 1635 l 5,5,-1
+ 311 1635 l 5,6,-1
+ 522 1901 l 5,0,-1
 EndSplineSet
 Refer: 42 71 N 1 0 0 1 0 0 2
 EndChar
@@ -55577,11 +55577,11 @@
 LayerCount: 2
 Fore
 SplineSet
-563 1872 m 5
- 768 1872 l 5
- 768 1667 l 5
- 563 1667 l 5
- 563 1872 l 5
+563 1872 m 5,0,-1
+ 768 1872 l 5,1,-1
+ 768 1667 l 5,2,-1
+ 563 1667 l 5,3,-1
+ 563 1872 l 5,0,-1
 EndSplineSet
 Refer: 42 71 N 1 0 0 1 0 0 2
 EndChar
@@ -55593,11 +55593,11 @@
 LayerCount: 2
 Fore
 SplineSet
-513 1552 m 5
- 718 1552 l 5
- 718 1348 l 5
- 513 1348 l 5
- 513 1552 l 5
+513 1552 m 5,0,-1
+ 718 1552 l 5,1,-1
+ 718 1348 l 5,2,-1
+ 513 1348 l 5,3,-1
+ 513 1552 l 5,0,-1
 EndSplineSet
 Refer: 74 103 N 1 0 0 1 0 0 2
 EndChar
@@ -55609,11 +55609,11 @@
 LayerCount: 2
 Fore
 SplineSet
-630 -228 m 5
- 869 -228 l 5
- 682 -573 l 5
- 536 -573 l 5
- 630 -228 l 5
+630 -228 m 5,0,-1
+ 869 -228 l 5,1,-1
+ 682 -573 l 5,2,-1
+ 536 -573 l 5,3,-1
+ 630 -228 l 5,0,-1
 EndSplineSet
 Refer: 42 71 N 1 0 0 1 0 0 2
 EndChar
@@ -55625,11 +55625,11 @@
 LayerCount: 2
 Fore
 SplineSet
-725 1269 m 5
- 486 1269 l 5
- 673 1614 l 5
- 819 1614 l 5
- 725 1269 l 5
+725 1269 m 5,0,-1
+ 486 1269 l 5,1,-1
+ 673 1614 l 5,2,-1
+ 819 1614 l 5,3,-1
+ 725 1269 l 5,0,-1
 EndSplineSet
 Refer: 74 103 N 1 0 0 1 0 0 2
 EndChar
@@ -55641,14 +55641,14 @@
 LayerCount: 2
 Fore
 SplineSet
-522 1901 m 5
- 711 1901 l 5
- 922 1635 l 5
- 782 1635 l 5
- 616 1813 l 5
- 451 1635 l 5
- 311 1635 l 5
- 522 1901 l 5
+522 1901 m 5,0,-1
+ 711 1901 l 5,1,-1
+ 922 1635 l 5,2,-1
+ 782 1635 l 5,3,-1
+ 616 1813 l 5,4,-1
+ 451 1635 l 5,5,-1
+ 311 1635 l 5,6,-1
+ 522 1901 l 5,0,-1
 EndSplineSet
 Refer: 43 72 N 1 0 0 1 0 0 2
 EndChar
@@ -55660,14 +55660,14 @@
 LayerCount: 2
 Fore
 SplineSet
-522 1901 m 5
- 711 1901 l 5
- 922 1635 l 5
- 782 1635 l 5
- 616 1813 l 5
- 451 1635 l 5
- 311 1635 l 5
- 522 1901 l 5
+522 1901 m 5,0,-1
+ 711 1901 l 5,1,-1
+ 922 1635 l 5,2,-1
+ 782 1635 l 5,3,-1
+ 616 1813 l 5,4,-1
+ 451 1635 l 5,5,-1
+ 311 1635 l 5,6,-1
+ 522 1901 l 5,0,-1
 EndSplineSet
 Refer: 75 104 N 1 0 0 1 0 0 2
 EndChar
@@ -55750,29 +55750,29 @@
 LayerCount: 2
 Fore
 SplineSet
-612 1710 m 5
- 555 1743 l 6
- 530 1757 530 1757 514.5 1762.5 c 4
- 499 1768 499 1768 487 1768 c 4
- 452 1768 452 1768 432 1743 c 4
- 412 1718 412 1718 412 1673 c 6
- 412 1667 l 5
- 287 1667 l 5
- 287 1768 287 1768 338.5 1827 c 4
- 390 1886 390 1886 475 1886 c 4
- 511 1886 511 1886 541.5 1878 c 4
- 572 1870 572 1870 621 1843 c 5
- 678 1813 l 5
- 700 1800 700 1800 717.5 1794 c 4
- 735 1788 735 1788 750 1788 c 4
- 781 1788 781 1788 801 1813.5 c 4
- 821 1839 821 1839 821 1880 c 6
- 821 1886 l 5
- 946 1886 l 5
- 944 1786 944 1786 893 1726.5 c 4
- 842 1667 842 1667 758 1667 c 4
- 724 1667 724 1667 694 1675 c 4
- 664 1683 664 1683 612 1710 c 5
+612 1710 m 5,0,-1
+ 555 1743 l 6,1,2
+ 530 1757 530 1757 514.5 1762.5 c 4,3,4
+ 499 1768 499 1768 487 1768 c 4,5,6
+ 452 1768 452 1768 432 1743 c 4,7,8
+ 412 1718 412 1718 412 1673 c 6,9,-1
+ 412 1667 l 5,10,-1
+ 287 1667 l 5,11,12
+ 287 1768 287 1768 338.5 1827 c 4,13,14
+ 390 1886 390 1886 475 1886 c 4,15,16
+ 511 1886 511 1886 541.5 1878 c 4,17,18
+ 572 1870 572 1870 621 1843 c 5,19,-1
+ 678 1813 l 5,20,21
+ 700 1800 700 1800 717.5 1794 c 4,22,23
+ 735 1788 735 1788 750 1788 c 4,24,25
+ 781 1788 781 1788 801 1813.5 c 4,26,27
+ 821 1839 821 1839 821 1880 c 6,28,-1
+ 821 1886 l 5,29,-1
+ 946 1886 l 5,30,31
+ 944 1786 944 1786 893 1726.5 c 4,32,33
+ 842 1667 842 1667 758 1667 c 4,34,35
+ 724 1667 724 1667 694 1675 c 4,36,37
+ 664 1683 664 1683 612 1710 c 5,0,-1
 EndSplineSet
 Refer: 44 73 N 1 0 0 1 0 0 2
 EndChar
@@ -55794,11 +55794,11 @@
 LayerCount: 2
 Fore
 SplineSet
-317 1840 m 5
- 915 1840 l 5
- 915 1692 l 5
- 317 1692 l 5
- 317 1840 l 5
+317 1840 m 5,0,-1
+ 915 1840 l 5,1,-1
+ 915 1692 l 5,2,-1
+ 317 1692 l 5,3,-1
+ 317 1840 l 5,0,-1
 EndSplineSet
 Refer: 44 73 N 1 0 0 1 0 0 2
 EndChar
@@ -55810,11 +55810,11 @@
 LayerCount: 2
 Fore
 SplineSet
-317 1526 m 5
- 915 1526 l 5
- 915 1378 l 5
- 317 1378 l 5
- 317 1526 l 5
+317 1526 m 5,0,-1
+ 915 1526 l 5,1,-1
+ 915 1378 l 5,2,-1
+ 317 1378 l 5,3,-1
+ 317 1526 l 5,0,-1
 EndSplineSet
 Refer: 214 305 N 1 0 0 1 0 0 2
 EndChar
@@ -55826,17 +55826,17 @@
 LayerCount: 2
 Fore
 SplineSet
-303 1901 m 5
- 422 1901 l 5
- 434 1847 434 1847 484 1818.5 c 4
- 534 1790 534 1790 616 1790 c 4
- 699 1790 699 1790 747.5 1817.5 c 4
- 796 1845 796 1845 811 1901 c 5
- 930 1901 l 5
- 919 1782 919 1782 839.5 1720.5 c 4
- 760 1659 760 1659 616 1659 c 260
- 472 1659 472 1659 393 1720 c 4
- 314 1781 314 1781 303 1901 c 5
+303 1901 m 5,0,-1
+ 422 1901 l 5,1,2
+ 434 1847 434 1847 484 1818.5 c 4,3,4
+ 534 1790 534 1790 616 1790 c 4,5,6
+ 699 1790 699 1790 747.5 1817.5 c 4,7,8
+ 796 1845 796 1845 811 1901 c 5,9,-1
+ 930 1901 l 5,10,11
+ 919 1782 919 1782 839.5 1720.5 c 4,12,13
+ 760 1659 760 1659 616 1659 c 260,14,15
+ 472 1659 472 1659 393 1720 c 4,16,17
+ 314 1781 314 1781 303 1901 c 5,0,-1
 EndSplineSet
 Refer: 44 73 N 1 0 0 1 0 0 2
 EndChar
@@ -55848,17 +55848,17 @@
 LayerCount: 2
 Fore
 SplineSet
-303 1608 m 5
- 422 1608 l 5
- 433 1532 433 1532 481 1495 c 4
- 529 1458 529 1458 616 1458 c 4
- 701 1458 701 1458 749 1495 c 4
- 797 1532 797 1532 811 1608 c 5
- 930 1608 l 5
- 919 1465 919 1465 840 1393 c 4
- 761 1321 761 1321 616 1321 c 4
- 472 1321 472 1321 393 1393 c 4
- 314 1465 314 1465 303 1608 c 5
+303 1608 m 5,0,-1
+ 422 1608 l 5,1,2
+ 433 1532 433 1532 481 1495 c 4,3,4
+ 529 1458 529 1458 616 1458 c 4,5,6
+ 701 1458 701 1458 749 1495 c 4,7,8
+ 797 1532 797 1532 811 1608 c 5,9,-1
+ 930 1608 l 5,10,11
+ 919 1465 919 1465 840 1393 c 4,12,13
+ 761 1321 761 1321 616 1321 c 4,14,15
+ 472 1321 472 1321 393 1393 c 4,16,17
+ 314 1465 314 1465 303 1608 c 5,0,-1
 EndSplineSet
 Refer: 214 305 N 1 0 0 1 0 0 2
 EndChar
@@ -55972,14 +55972,14 @@
 LayerCount: 2
 Fore
 SplineSet
-570 1901 m 5
- 759 1901 l 5
- 970 1635 l 5
- 830 1635 l 5
- 664 1813 l 5
- 499 1635 l 5
- 359 1635 l 5
- 570 1901 l 5
+570 1901 m 5,0,-1
+ 759 1901 l 5,1,-1
+ 970 1635 l 5,2,-1
+ 830 1635 l 5,3,-1
+ 664 1813 l 5,4,-1
+ 499 1635 l 5,5,-1
+ 359 1635 l 5,6,-1
+ 570 1901 l 5,0,-1
 EndSplineSet
 Refer: 45 74 N 1 0 0 1 0 0 2
 EndChar
@@ -55991,19 +55991,19 @@
 LayerCount: 2
 Fore
 SplineSet
-600 -20 m 6
- 600 977 l 5
- 283 977 l 5
- 283 1120 l 5
- 784 1120 l 5
- 784 -20 l 6
- 784 -215 784 -215 694.5 -320.5 c 4
- 605 -426 605 -426 440 -426 c 6
- 186 -426 l 5
- 186 -270 l 5
- 420 -270 l 6
- 510 -270 510 -270 555 -207.5 c 4
- 600 -145 600 -145 600 -20 c 6
+600 -20 m 6,0,-1
+ 600 977 l 5,1,-1
+ 283 977 l 5,2,-1
+ 283 1120 l 5,3,-1
+ 784 1120 l 5,4,-1
+ 784 -20 l 6,5,6
+ 784 -215 784 -215 694.5 -320.5 c 4,7,8
+ 605 -426 605 -426 440 -426 c 6,9,-1
+ 186 -426 l 5,10,-1
+ 186 -270 l 5,11,-1
+ 420 -270 l 6,12,13
+ 510 -270 510 -270 555 -207.5 c 4,14,15
+ 600 -145 600 -145 600 -20 c 6,0,-1
 EndSplineSet
 Refer: 215 710 N 1 0 0 1 0 0 2
 EndChar
@@ -56015,11 +56015,11 @@
 LayerCount: 2
 Fore
 SplineSet
-608 -199 m 5
- 847 -199 l 5
- 660 -544 l 5
- 514 -544 l 5
- 608 -199 l 5
+608 -199 m 5,0,-1
+ 847 -199 l 5,1,-1
+ 660 -544 l 5,2,-1
+ 514 -544 l 5,3,-1
+ 608 -199 l 5,0,-1
 EndSplineSet
 Refer: 46 75 N 1 0 0 1 0 0 2
 EndChar
@@ -56031,11 +56031,11 @@
 LayerCount: 2
 Fore
 SplineSet
-646 -199 m 5
- 885 -199 l 5
- 698 -544 l 5
- 552 -544 l 5
- 646 -199 l 5
+646 -199 m 5,0,-1
+ 885 -199 l 5,1,-1
+ 698 -544 l 5,2,-1
+ 552 -544 l 5,3,-1
+ 646 -199 l 5,0,-1
 EndSplineSet
 Refer: 78 107 N 1 0 0 1 0 0 2
 EndChar
@@ -56070,11 +56070,11 @@
 LayerCount: 2
 Fore
 SplineSet
-397 1900 m 5
- 583 1900 l 5
- 354 1636 l 5
- 200 1636 l 5
- 397 1900 l 5
+397 1900 m 5,0,-1
+ 583 1900 l 5,1,-1
+ 354 1636 l 5,2,-1
+ 200 1636 l 5,3,-1
+ 397 1900 l 5,0,-1
 EndSplineSet
 Refer: 47 76 N 1 0 0 1 0 0 2
 EndChar
@@ -56086,11 +56086,11 @@
 LayerCount: 2
 Fore
 SplineSet
-577 1900 m 5
- 763 1900 l 5
- 534 1636 l 5
- 380 1636 l 5
- 577 1900 l 5
+577 1900 m 5,0,-1
+ 763 1900 l 5,1,-1
+ 534 1636 l 5,2,-1
+ 380 1636 l 5,3,-1
+ 577 1900 l 5,0,-1
 EndSplineSet
 Refer: 79 108 N 1 0 0 1 0 0 2
 EndChar
@@ -56102,11 +56102,11 @@
 LayerCount: 2
 Fore
 SplineSet
-604 -199 m 5
- 843 -199 l 5
- 656 -544 l 5
- 510 -544 l 5
- 604 -199 l 5
+604 -199 m 5,0,-1
+ 843 -199 l 5,1,-1
+ 656 -544 l 5,2,-1
+ 510 -544 l 5,3,-1
+ 604 -199 l 5,0,-1
 EndSplineSet
 Refer: 47 76 N 1 0 0 1 0 0 2
 EndChar
@@ -56118,11 +56118,11 @@
 LayerCount: 2
 Fore
 SplineSet
-497 -199 m 5
- 736 -199 l 5
- 549 -544 l 5
- 403 -544 l 5
- 497 -199 l 5
+497 -199 m 5,0,-1
+ 736 -199 l 5,1,-1
+ 549 -544 l 5,2,-1
+ 403 -544 l 5,3,-1
+ 497 -199 l 5,0,-1
 EndSplineSet
 Refer: 79 108 N 1 0 0 1 0 0 2
 EndChar
@@ -56134,11 +56134,11 @@
 LayerCount: 2
 Fore
 SplineSet
-718 1491 m 5
- 916 1491 l 5
- 803 1115 l 5
- 649 1115 l 5
- 718 1491 l 5
+718 1491 m 5,0,-1
+ 916 1491 l 5,1,-1
+ 803 1115 l 5,2,-1
+ 649 1115 l 5,3,-1
+ 718 1491 l 5,0,-1
 EndSplineSet
 Refer: 47 76 N 1 0 0 1 0 0 2
 EndChar
@@ -56150,11 +56150,11 @@
 LayerCount: 2
 Fore
 SplineSet
-960 1567 m 5
- 1158 1567 l 5
- 1045 1191 l 5
- 891 1191 l 5
- 960 1567 l 5
+960 1567 m 5,0,-1
+ 1158 1567 l 5,1,-1
+ 1045 1191 l 5,2,-1
+ 891 1191 l 5,3,-1
+ 960 1567 l 5,0,-1
 EndSplineSet
 Refer: 79 108 N 1 0 0 1 0 0 2
 EndChar
@@ -56186,11 +56186,11 @@
 LayerCount: 2
 Fore
 SplineSet
-705 1899 m 5
- 891 1899 l 5
- 662 1635 l 5
- 508 1635 l 5
- 705 1899 l 5
+705 1899 m 5,0,-1
+ 891 1899 l 5,1,-1
+ 662 1635 l 5,2,-1
+ 508 1635 l 5,3,-1
+ 705 1899 l 5,0,-1
 EndSplineSet
 Refer: 49 78 N 1 0 0 1 0 0 2
 EndChar
@@ -56212,11 +56212,11 @@
 LayerCount: 2
 Fore
 SplineSet
-544 -199 m 5
- 783 -199 l 5
- 596 -544 l 5
- 450 -544 l 5
- 544 -199 l 5
+544 -199 m 5,0,-1
+ 783 -199 l 5,1,-1
+ 596 -544 l 5,2,-1
+ 450 -544 l 5,3,-1
+ 544 -199 l 5,0,-1
 EndSplineSet
 Refer: 49 78 N 1 0 0 1 0 0 2
 EndChar
@@ -56228,11 +56228,11 @@
 LayerCount: 2
 Fore
 SplineSet
-550 -199 m 5
- 789 -199 l 5
- 602 -544 l 5
- 456 -544 l 5
- 550 -199 l 5
+550 -199 m 5,0,-1
+ 789 -199 l 5,1,-1
+ 602 -544 l 5,2,-1
+ 456 -544 l 5,3,-1
+ 550 -199 l 5,0,-1
 EndSplineSet
 Refer: 81 110 N 1 0 0 1 0 0 2
 EndChar
@@ -56244,14 +56244,14 @@
 LayerCount: 2
 Fore
 SplineSet
-564 1635 m 5
- 353 1901 l 5
- 493 1901 l 5
- 658 1723 l 5
- 824 1901 l 5
- 964 1901 l 5
- 753 1635 l 5
- 564 1635 l 5
+564 1635 m 5,0,-1
+ 353 1901 l 5,1,-1
+ 493 1901 l 5,2,-1
+ 658 1723 l 5,3,-1
+ 824 1901 l 5,4,-1
+ 964 1901 l 5,5,-1
+ 753 1635 l 5,6,-1
+ 564 1635 l 5,0,-1
 EndSplineSet
 Refer: 49 78 N 1 0 0 1 0 0 2
 EndChar
@@ -56348,11 +56348,11 @@
 LayerCount: 2
 Fore
 SplineSet
-317 1840 m 5
- 915 1840 l 5
- 915 1692 l 5
- 317 1692 l 5
- 317 1840 l 5
+317 1840 m 5,0,-1
+ 915 1840 l 5,1,-1
+ 915 1692 l 5,2,-1
+ 317 1692 l 5,3,-1
+ 317 1840 l 5,0,-1
 EndSplineSet
 Refer: 50 79 N 1 0 0 1 0 0 2
 EndChar
@@ -56364,11 +56364,11 @@
 LayerCount: 2
 Fore
 SplineSet
-317 1526 m 5
- 915 1526 l 5
- 915 1378 l 5
- 317 1378 l 5
- 317 1526 l 5
+317 1526 m 5,0,-1
+ 915 1526 l 5,1,-1
+ 915 1378 l 5,2,-1
+ 317 1378 l 5,3,-1
+ 317 1526 l 5,0,-1
 EndSplineSet
 Refer: 82 111 N 1 0 0 1 0 0 2
 EndChar
@@ -56380,17 +56380,17 @@
 LayerCount: 2
 Fore
 SplineSet
-303 1901 m 5
- 422 1901 l 5
- 434 1847 434 1847 484 1818.5 c 4
- 534 1790 534 1790 616 1790 c 4
- 699 1790 699 1790 747.5 1817.5 c 4
- 796 1845 796 1845 811 1901 c 5
- 930 1901 l 5
- 919 1782 919 1782 839.5 1720.5 c 4
- 760 1659 760 1659 616 1659 c 260
- 472 1659 472 1659 393 1720 c 4
- 314 1781 314 1781 303 1901 c 5
+303 1901 m 5,0,-1
+ 422 1901 l 5,1,2
+ 434 1847 434 1847 484 1818.5 c 4,3,4
+ 534 1790 534 1790 616 1790 c 4,5,6
+ 699 1790 699 1790 747.5 1817.5 c 4,7,8
+ 796 1845 796 1845 811 1901 c 5,9,-1
+ 930 1901 l 5,10,11
+ 919 1782 919 1782 839.5 1720.5 c 4,12,13
+ 760 1659 760 1659 616 1659 c 260,14,15
+ 472 1659 472 1659 393 1720 c 4,16,17
+ 314 1781 314 1781 303 1901 c 5,0,-1
 EndSplineSet
 Refer: 50 79 N 1 0 0 1 0 0 2
 EndChar
@@ -56402,17 +56402,17 @@
 LayerCount: 2
 Fore
 SplineSet
-303 1608 m 5
- 422 1608 l 5
- 433 1532 433 1532 481 1495 c 4
- 529 1458 529 1458 616 1458 c 4
- 701 1458 701 1458 749 1495 c 4
- 797 1532 797 1532 811 1608 c 5
- 930 1608 l 5
- 919 1465 919 1465 840 1393 c 4
- 761 1321 761 1321 616 1321 c 4
- 472 1321 472 1321 393 1393 c 4
- 314 1465 314 1465 303 1608 c 5
+303 1608 m 5,0,-1
+ 422 1608 l 5,1,2
+ 433 1532 433 1532 481 1495 c 4,3,4
+ 529 1458 529 1458 616 1458 c 4,5,6
+ 701 1458 701 1458 749 1495 c 4,7,8
+ 797 1532 797 1532 811 1608 c 5,9,-1
+ 930 1608 l 5,10,11
+ 919 1465 919 1465 840 1393 c 4,12,13
+ 761 1321 761 1321 616 1321 c 4,14,15
+ 472 1321 472 1321 393 1393 c 4,16,17
+ 314 1465 314 1465 303 1608 c 5,0,-1
 EndSplineSet
 Refer: 82 111 N 1 0 0 1 0 0 2
 EndChar
@@ -56424,16 +56424,16 @@
 LayerCount: 2
 Fore
 SplineSet
-860 1899 m 5
- 1046 1899 l 5
- 817 1635 l 5
- 663 1635 l 5
- 860 1899 l 5
-541 1899 m 5
- 727 1899 l 5
- 498 1635 l 5
- 344 1635 l 5
- 541 1899 l 5
+860 1899 m 5,0,-1
+ 1046 1899 l 5,1,-1
+ 817 1635 l 5,2,-1
+ 663 1635 l 5,3,-1
+ 860 1899 l 5,0,-1
+541 1899 m 5,4,-1
+ 727 1899 l 5,5,-1
+ 498 1635 l 5,6,-1
+ 344 1635 l 5,7,-1
+ 541 1899 l 5,4,-1
 EndSplineSet
 Refer: 50 79 N 1 0 0 1 0 0 2
 EndChar
@@ -56445,16 +56445,16 @@
 LayerCount: 2
 Fore
 SplineSet
-535 1638 m 5
- 705 1638 l 5
- 481 1262 l 5
- 344 1262 l 5
- 535 1638 l 5
-868 1638 m 5
- 1047 1638 l 5
- 799 1262 l 5
- 664 1262 l 5
- 868 1638 l 5
+535 1638 m 5,0,-1
+ 705 1638 l 5,1,-1
+ 481 1262 l 5,2,-1
+ 344 1262 l 5,3,-1
+ 535 1638 l 5,0,-1
+868 1638 m 5,4,-1
+ 1047 1638 l 5,5,-1
+ 799 1262 l 5,6,-1
+ 664 1262 l 5,7,-1
+ 868 1638 l 5,4,-1
 EndSplineSet
 Refer: 82 111 N 1 0 0 1 0 0 2
 EndChar
@@ -56466,11 +56466,11 @@
 LayerCount: 2
 Fore
 SplineSet
-597 1899 m 5
- 783 1899 l 5
- 554 1635 l 5
- 400 1635 l 5
- 597 1899 l 5
+597 1899 m 5,0,-1
+ 783 1899 l 5,1,-1
+ 554 1635 l 5,2,-1
+ 400 1635 l 5,3,-1
+ 597 1899 l 5,0,-1
 EndSplineSet
 Refer: 53 82 N 1 0 0 1 0 0 2
 EndChar
@@ -56492,11 +56492,11 @@
 LayerCount: 2
 Fore
 SplineSet
-616 -199 m 5
- 855 -199 l 5
- 668 -544 l 5
- 522 -544 l 5
- 616 -199 l 5
+616 -199 m 5,0,-1
+ 855 -199 l 5,1,-1
+ 668 -544 l 5,2,-1
+ 522 -544 l 5,3,-1
+ 616 -199 l 5,0,-1
 EndSplineSet
 Refer: 53 82 N 1 0 0 1 0 0 2
 EndChar
@@ -56508,11 +56508,11 @@
 LayerCount: 2
 Fore
 SplineSet
-382 -199 m 5
- 621 -199 l 5
- 434 -544 l 5
- 288 -544 l 5
- 382 -199 l 5
+382 -199 m 5,0,-1
+ 621 -199 l 5,1,-1
+ 434 -544 l 5,2,-1
+ 288 -544 l 5,3,-1
+ 382 -199 l 5,0,-1
 EndSplineSet
 Refer: 85 114 N 1 0 0 1 0 0 2
 EndChar
@@ -56524,14 +56524,14 @@
 LayerCount: 2
 Fore
 SplineSet
-462 1629 m 5
- 251 1895 l 5
- 391 1895 l 5
- 556 1717 l 5
- 722 1895 l 5
- 862 1895 l 5
- 651 1629 l 5
- 462 1629 l 5
+462 1629 m 5,0,-1
+ 251 1895 l 5,1,-1
+ 391 1895 l 5,2,-1
+ 556 1717 l 5,3,-1
+ 722 1895 l 5,4,-1
+ 862 1895 l 5,5,-1
+ 651 1629 l 5,6,-1
+ 462 1629 l 5,0,-1
 EndSplineSet
 Refer: 53 82 N 1 0 0 1 0 0 2
 EndChar
@@ -56553,11 +56553,11 @@
 LayerCount: 2
 Fore
 SplineSet
-697 1899 m 5
- 883 1899 l 5
- 654 1635 l 5
- 500 1635 l 5
- 697 1899 l 5
+697 1899 m 5,0,-1
+ 883 1899 l 5,1,-1
+ 654 1635 l 5,2,-1
+ 500 1635 l 5,3,-1
+ 697 1899 l 5,0,-1
 EndSplineSet
 Refer: 54 83 N 1 0 0 1 0 0 2
 EndChar
@@ -56579,14 +56579,14 @@
 LayerCount: 2
 Fore
 SplineSet
-522 1901 m 5
- 711 1901 l 5
- 922 1635 l 5
- 782 1635 l 5
- 616 1813 l 5
- 451 1635 l 5
- 311 1635 l 5
- 522 1901 l 5
+522 1901 m 5,0,-1
+ 711 1901 l 5,1,-1
+ 922 1635 l 5,2,-1
+ 782 1635 l 5,3,-1
+ 616 1813 l 5,4,-1
+ 451 1635 l 5,5,-1
+ 311 1635 l 5,6,-1
+ 522 1901 l 5,0,-1
 EndSplineSet
 Refer: 54 83 N 1 0 0 1 0 0 2
 EndChar
@@ -56608,21 +56608,21 @@
 LayerCount: 2
 Fore
 SplineSet
-700 0 m 5
- 756 -62 756 -62 782.5 -114.5 c 4
- 809 -167 809 -167 809 -215 c 4
- 809 -304 809 -304 749 -349.5 c 4
- 689 -395 689 -395 571 -395 c 4
- 526 -395 526 -395 482.5 -389 c 4
- 439 -383 439 -383 395 -371 c 5
- 395 -240 l 5
- 429 -257 429 -257 466.5 -264.5 c 4
- 504 -272 504 -272 551 -272 c 4
- 609 -272 609 -272 639.5 -248 c 4
- 670 -224 670 -224 670 -178 c 4
- 670 -148 670 -148 648 -104.5 c 4
- 626 -61 626 -61 582 0 c 5
- 700 0 l 5
+700 0 m 5,0,1
+ 756 -62 756 -62 782.5 -114.5 c 4,2,3
+ 809 -167 809 -167 809 -215 c 4,4,5
+ 809 -304 809 -304 749 -349.5 c 4,6,7
+ 689 -395 689 -395 571 -395 c 4,8,9
+ 526 -395 526 -395 482.5 -389 c 4,10,11
+ 439 -383 439 -383 395 -371 c 5,12,-1
+ 395 -240 l 5,13,14
+ 429 -257 429 -257 466.5 -264.5 c 4,15,16
+ 504 -272 504 -272 551 -272 c 4,17,18
+ 609 -272 609 -272 639.5 -248 c 4,19,20
+ 670 -224 670 -224 670 -178 c 4,21,22
+ 670 -148 670 -148 648 -104.5 c 4,23,24
+ 626 -61 626 -61 582 0 c 5,25,-1
+ 700 0 l 5,0,1
 EndSplineSet
 Refer: 55 84 N 1 0 0 1 0 0 2
 EndChar
@@ -56634,21 +56634,21 @@
 LayerCount: 2
 Fore
 SplineSet
-821 0 m 5
- 877 -62 877 -62 903.5 -114.5 c 4
- 930 -167 930 -167 930 -215 c 4
- 930 -304 930 -304 870 -349.5 c 4
- 810 -395 810 -395 692 -395 c 4
- 647 -395 647 -395 603.5 -389 c 4
- 560 -383 560 -383 516 -371 c 5
- 516 -240 l 5
- 550 -257 550 -257 587.5 -264.5 c 4
- 625 -272 625 -272 672 -272 c 4
- 730 -272 730 -272 760.5 -248 c 4
- 791 -224 791 -224 791 -178 c 4
- 791 -148 791 -148 769 -104.5 c 4
- 747 -61 747 -61 703 0 c 5
- 821 0 l 5
+821 0 m 5,0,1
+ 877 -62 877 -62 903.5 -114.5 c 4,2,3
+ 930 -167 930 -167 930 -215 c 4,4,5
+ 930 -304 930 -304 870 -349.5 c 4,6,7
+ 810 -395 810 -395 692 -395 c 4,8,9
+ 647 -395 647 -395 603.5 -389 c 4,10,11
+ 560 -383 560 -383 516 -371 c 5,12,-1
+ 516 -240 l 5,13,14
+ 550 -257 550 -257 587.5 -264.5 c 4,15,16
+ 625 -272 625 -272 672 -272 c 4,17,18
+ 730 -272 730 -272 760.5 -248 c 4,19,20
+ 791 -224 791 -224 791 -178 c 4,21,22
+ 791 -148 791 -148 769 -104.5 c 4,23,24
+ 747 -61 747 -61 703 0 c 5,25,-1
+ 821 0 l 5,0,1
 EndSplineSet
 Refer: 87 116 N 1 0 0 1 0 0 2
 EndChar
@@ -56660,14 +56660,14 @@
 LayerCount: 2
 Fore
 SplineSet
-528 1635 m 5
- 317 1901 l 5
- 457 1901 l 5
- 622 1723 l 5
- 788 1901 l 5
- 928 1901 l 5
- 717 1635 l 5
- 528 1635 l 5
+528 1635 m 5,0,-1
+ 317 1901 l 5,1,-1
+ 457 1901 l 5,2,-1
+ 622 1723 l 5,3,-1
+ 788 1901 l 5,4,-1
+ 928 1901 l 5,5,-1
+ 717 1635 l 5,6,-1
+ 528 1635 l 5,0,-1
 EndSplineSet
 Refer: 55 84 N 1 0 0 1 0 0 2
 EndChar
@@ -56679,11 +56679,11 @@
 LayerCount: 2
 Fore
 SplineSet
-820 1662 m 5
- 1018 1662 l 5
- 905 1286 l 5
- 751 1286 l 5
- 820 1662 l 5
+820 1662 m 5,0,-1
+ 1018 1662 l 5,1,-1
+ 905 1286 l 5,2,-1
+ 751 1286 l 5,3,-1
+ 820 1662 l 5,0,-1
 EndSplineSet
 Refer: 87 116 N 1 0 0 1 0 0 2
 EndChar
@@ -56759,29 +56759,29 @@
 LayerCount: 2
 Fore
 SplineSet
-612 1710 m 5
- 555 1743 l 6
- 530 1757 530 1757 514.5 1762.5 c 4
- 499 1768 499 1768 487 1768 c 4
- 452 1768 452 1768 432 1743 c 4
- 412 1718 412 1718 412 1673 c 6
- 412 1667 l 5
- 287 1667 l 5
- 287 1768 287 1768 338.5 1827 c 4
- 390 1886 390 1886 475 1886 c 4
- 511 1886 511 1886 541.5 1878 c 4
- 572 1870 572 1870 621 1843 c 5
- 678 1813 l 5
- 700 1800 700 1800 717.5 1794 c 4
- 735 1788 735 1788 750 1788 c 4
- 781 1788 781 1788 801 1813.5 c 4
- 821 1839 821 1839 821 1880 c 6
- 821 1886 l 5
- 946 1886 l 5
- 944 1786 944 1786 893 1726.5 c 4
- 842 1667 842 1667 758 1667 c 4
- 724 1667 724 1667 694 1675 c 4
- 664 1683 664 1683 612 1710 c 5
+612 1710 m 5,0,-1
+ 555 1743 l 6,1,2
+ 530 1757 530 1757 514.5 1762.5 c 4,3,4
+ 499 1768 499 1768 487 1768 c 4,5,6
+ 452 1768 452 1768 432 1743 c 4,7,8
+ 412 1718 412 1718 412 1673 c 6,9,-1
+ 412 1667 l 5,10,-1
+ 287 1667 l 5,11,12
+ 287 1768 287 1768 338.5 1827 c 4,13,14
+ 390 1886 390 1886 475 1886 c 4,15,16
+ 511 1886 511 1886 541.5 1878 c 4,17,18
+ 572 1870 572 1870 621 1843 c 5,19,-1
+ 678 1813 l 5,20,21
+ 700 1800 700 1800 717.5 1794 c 4,22,23
+ 735 1788 735 1788 750 1788 c 4,24,25
+ 781 1788 781 1788 801 1813.5 c 4,26,27
+ 821 1839 821 1839 821 1880 c 6,28,-1
+ 821 1886 l 5,29,-1
+ 946 1886 l 5,30,31
+ 944 1786 944 1786 893 1726.5 c 4,32,33
+ 842 1667 842 1667 758 1667 c 4,34,35
+ 724 1667 724 1667 694 1675 c 4,36,37
+ 664 1683 664 1683 612 1710 c 5,0,-1
 EndSplineSet
 Refer: 56 85 N 1 0 0 1 0 0 2
 EndChar
@@ -56803,11 +56803,11 @@
 LayerCount: 2
 Fore
 SplineSet
-317 1840 m 5
- 915 1840 l 5
- 915 1692 l 5
- 317 1692 l 5
- 317 1840 l 5
+317 1840 m 5,0,-1
+ 915 1840 l 5,1,-1
+ 915 1692 l 5,2,-1
+ 317 1692 l 5,3,-1
+ 317 1840 l 5,0,-1
 EndSplineSet
 Refer: 56 85 N 1 0 0 1 0 0 2
 EndChar
@@ -56819,11 +56819,11 @@
 LayerCount: 2
 Fore
 SplineSet
-317 1526 m 5
- 915 1526 l 5
- 915 1378 l 5
- 317 1378 l 5
- 317 1526 l 5
+317 1526 m 5,0,-1
+ 915 1526 l 5,1,-1
+ 915 1378 l 5,2,-1
+ 317 1378 l 5,3,-1
+ 317 1526 l 5,0,-1
 EndSplineSet
 Refer: 88 117 N 1 0 0 1 0 0 2
 EndChar
@@ -56835,17 +56835,17 @@
 LayerCount: 2
 Fore
 SplineSet
-303 1901 m 5
- 422 1901 l 5
- 434 1847 434 1847 484 1818.5 c 4
- 534 1790 534 1790 616 1790 c 4
- 699 1790 699 1790 747.5 1817.5 c 4
- 796 1845 796 1845 811 1901 c 5
- 930 1901 l 5
- 919 1782 919 1782 839.5 1720.5 c 4
- 760 1659 760 1659 616 1659 c 260
- 472 1659 472 1659 393 1720 c 4
- 314 1781 314 1781 303 1901 c 5
+303 1901 m 5,0,-1
+ 422 1901 l 5,1,2
+ 434 1847 434 1847 484 1818.5 c 4,3,4
+ 534 1790 534 1790 616 1790 c 4,5,6
+ 699 1790 699 1790 747.5 1817.5 c 4,7,8
+ 796 1845 796 1845 811 1901 c 5,9,-1
+ 930 1901 l 5,10,11
+ 919 1782 919 1782 839.5 1720.5 c 4,12,13
+ 760 1659 760 1659 616 1659 c 260,14,15
+ 472 1659 472 1659 393 1720 c 4,16,17
+ 314 1781 314 1781 303 1901 c 5,0,-1
 EndSplineSet
 Refer: 56 85 N 1 0 0 1 0 0 2
 EndChar
@@ -56857,17 +56857,17 @@
 LayerCount: 2
 Fore
 SplineSet
-303 1608 m 5
- 422 1608 l 5
- 433 1532 433 1532 481 1495 c 4
- 529 1458 529 1458 616 1458 c 4
- 701 1458 701 1458 749 1495 c 4
- 797 1532 797 1532 811 1608 c 5
- 930 1608 l 5
- 919 1465 919 1465 840 1393 c 4
- 761 1321 761 1321 616 1321 c 4
- 472 1321 472 1321 393 1393 c 4
- 314 1465 314 1465 303 1608 c 5
+303 1608 m 5,0,-1
+ 422 1608 l 5,1,2
+ 433 1532 433 1532 481 1495 c 4,3,4
+ 529 1458 529 1458 616 1458 c 4,5,6
+ 701 1458 701 1458 749 1495 c 4,7,8
+ 797 1532 797 1532 811 1608 c 5,9,-1
+ 930 1608 l 5,10,11
+ 919 1465 919 1465 840 1393 c 4,12,13
+ 761 1321 761 1321 616 1321 c 4,14,15
+ 472 1321 472 1321 393 1393 c 4,16,17
+ 314 1465 314 1465 303 1608 c 5,0,-1
 EndSplineSet
 Refer: 88 117 N 1 0 0 1 0 0 2
 EndChar
@@ -56899,16 +56899,16 @@
 LayerCount: 2
 Fore
 SplineSet
-860 1899 m 5
- 1046 1899 l 5
- 817 1635 l 5
- 663 1635 l 5
- 860 1899 l 5
-541 1899 m 5
- 727 1899 l 5
- 498 1635 l 5
- 344 1635 l 5
- 541 1899 l 5
+860 1899 m 5,0,-1
+ 1046 1899 l 5,1,-1
+ 817 1635 l 5,2,-1
+ 663 1635 l 5,3,-1
+ 860 1899 l 5,0,-1
+541 1899 m 5,4,-1
+ 727 1899 l 5,5,-1
+ 498 1635 l 5,6,-1
+ 344 1635 l 5,7,-1
+ 541 1899 l 5,4,-1
 EndSplineSet
 Refer: 56 85 N 1 0 0 1 0 0 2
 EndChar
@@ -56920,16 +56920,16 @@
 LayerCount: 2
 Fore
 SplineSet
-535 1638 m 5
- 705 1638 l 5
- 481 1262 l 5
- 344 1262 l 5
- 535 1638 l 5
-868 1638 m 5
- 1047 1638 l 5
- 799 1262 l 5
- 664 1262 l 5
- 868 1638 l 5
+535 1638 m 5,0,-1
+ 705 1638 l 5,1,-1
+ 481 1262 l 5,2,-1
+ 344 1262 l 5,3,-1
+ 535 1638 l 5,0,-1
+868 1638 m 5,4,-1
+ 1047 1638 l 5,5,-1
+ 799 1262 l 5,6,-1
+ 664 1262 l 5,7,-1
+ 868 1638 l 5,4,-1
 EndSplineSet
 Refer: 88 117 N 1 0 0 1 0 0 2
 EndChar
@@ -56961,14 +56961,14 @@
 LayerCount: 2
 Fore
 SplineSet
-522 1908 m 5
- 711 1908 l 5
- 922 1642 l 5
- 782 1642 l 5
- 616 1820 l 5
- 451 1642 l 5
- 311 1642 l 5
- 522 1908 l 5
+522 1908 m 5,0,-1
+ 711 1908 l 5,1,-1
+ 922 1642 l 5,2,-1
+ 782 1642 l 5,3,-1
+ 616 1820 l 5,4,-1
+ 451 1642 l 5,5,-1
+ 311 1642 l 5,6,-1
+ 522 1908 l 5,0,-1
 EndSplineSet
 Refer: 58 87 N 1 0 0 1 0 0 2
 EndChar
@@ -56990,14 +56990,14 @@
 LayerCount: 2
 Fore
 SplineSet
-522 1908 m 5
- 711 1908 l 5
- 922 1642 l 5
- 782 1642 l 5
- 616 1820 l 5
- 451 1642 l 5
- 311 1642 l 5
- 522 1908 l 5
+522 1908 m 5,0,-1
+ 711 1908 l 5,1,-1
+ 922 1642 l 5,2,-1
+ 782 1642 l 5,3,-1
+ 616 1820 l 5,4,-1
+ 451 1642 l 5,5,-1
+ 311 1642 l 5,6,-1
+ 522 1908 l 5,0,-1
 EndSplineSet
 Refer: 60 89 N 1 0 0 1 0 0 2
 EndChar
@@ -57019,11 +57019,11 @@
 LayerCount: 2
 Fore
 SplineSet
-699 1899 m 5
- 885 1899 l 5
- 656 1635 l 5
- 502 1635 l 5
- 699 1899 l 5
+699 1899 m 5,0,-1
+ 885 1899 l 5,1,-1
+ 656 1635 l 5,2,-1
+ 502 1635 l 5,3,-1
+ 699 1899 l 5,0,-1
 EndSplineSet
 Refer: 61 90 N 1 0 0 1 0 0 2
 EndChar
@@ -57045,11 +57045,11 @@
 LayerCount: 2
 Fore
 SplineSet
-563 1872 m 5
- 768 1872 l 5
- 768 1667 l 5
- 563 1667 l 5
- 563 1872 l 5
+563 1872 m 5,0,-1
+ 768 1872 l 5,1,-1
+ 768 1667 l 5,2,-1
+ 563 1667 l 5,3,-1
+ 563 1872 l 5,0,-1
 EndSplineSet
 Refer: 61 90 N 1 0 0 1 0 0 2
 EndChar
@@ -57061,11 +57061,11 @@
 LayerCount: 2
 Fore
 SplineSet
-513 1552 m 5
- 718 1552 l 5
- 718 1348 l 5
- 513 1348 l 5
- 513 1552 l 5
+513 1552 m 5,0,-1
+ 718 1552 l 5,1,-1
+ 718 1348 l 5,2,-1
+ 513 1348 l 5,3,-1
+ 513 1552 l 5,0,-1
 EndSplineSet
 Refer: 93 122 N 1 0 0 1 0 0 2
 EndChar
@@ -58074,21 +58074,21 @@
 LayerCount: 2
 Fore
 SplineSet
-796 1292 m 5
- 796 1411 l 5
- 857 1366 857 1366 901 1344.5 c 4
- 945 1323 945 1323 976 1323 c 4
- 1022 1323 1022 1323 1045 1350.5 c 4
- 1068 1378 1068 1378 1068 1432 c 4
- 1068 1464 1068 1464 1060.5 1495 c 4
- 1053 1526 1053 1526 1038 1557 c 5
- 1171 1557 l 5
- 1181 1519 1181 1519 1186 1485 c 4
- 1191 1451 1191 1451 1191 1421 c 4
- 1191 1299 1191 1299 1147.5 1241.5 c 4
- 1104 1184 1104 1184 1011 1184 c 4
- 963 1184 963 1184 910.5 1210.5 c 4
- 858 1237 858 1237 796 1292 c 5
+796 1292 m 5,0,-1
+ 796 1411 l 5,1,2
+ 857 1366 857 1366 901 1344.5 c 4,3,4
+ 945 1323 945 1323 976 1323 c 4,5,6
+ 1022 1323 1022 1323 1045 1350.5 c 4,7,8
+ 1068 1378 1068 1378 1068 1432 c 4,9,10
+ 1068 1464 1068 1464 1060.5 1495 c 4,11,12
+ 1053 1526 1053 1526 1038 1557 c 5,13,-1
+ 1171 1557 l 5,14,15
+ 1181 1519 1181 1519 1186 1485 c 4,16,17
+ 1191 1451 1191 1451 1191 1421 c 4,18,19
+ 1191 1299 1191 1299 1147.5 1241.5 c 4,20,21
+ 1104 1184 1104 1184 1011 1184 c 4,22,23
+ 963 1184 963 1184 910.5 1210.5 c 4,24,25
+ 858 1237 858 1237 796 1292 c 5,0,-1
 EndSplineSet
 Refer: 50 79 N 1 0 0 1 -111 0 2
 EndChar
@@ -58100,21 +58100,21 @@
 LayerCount: 2
 Fore
 SplineSet
-807 872 m 5
- 807 991 l 5
- 868 946 868 946 912 924.5 c 4
- 956 903 956 903 987 903 c 4
- 1033 903 1033 903 1056 930.5 c 4
- 1079 958 1079 958 1079 1012 c 4
- 1079 1044 1079 1044 1071.5 1075 c 4
- 1064 1106 1064 1106 1049 1137 c 5
- 1182 1137 l 5
- 1192 1099 1192 1099 1197 1065 c 4
- 1202 1031 1202 1031 1202 1001 c 4
- 1202 879 1202 879 1158.5 821.5 c 4
- 1115 764 1115 764 1022 764 c 4
- 974 764 974 764 921.5 790.5 c 4
- 869 817 869 817 807 872 c 5
+807 872 m 5,0,-1
+ 807 991 l 5,1,2
+ 868 946 868 946 912 924.5 c 4,3,4
+ 956 903 956 903 987 903 c 4,5,6
+ 1033 903 1033 903 1056 930.5 c 4,7,8
+ 1079 958 1079 958 1079 1012 c 4,9,10
+ 1079 1044 1079 1044 1071.5 1075 c 4,11,12
+ 1064 1106 1064 1106 1049 1137 c 5,13,-1
+ 1182 1137 l 5,14,15
+ 1192 1099 1192 1099 1197 1065 c 4,16,17
+ 1202 1031 1202 1031 1202 1001 c 4,18,19
+ 1202 879 1202 879 1158.5 821.5 c 4,20,21
+ 1115 764 1115 764 1022 764 c 4,22,23
+ 974 764 974 764 921.5 790.5 c 4,24,25
+ 869 817 869 817 807 872 c 5,0,-1
 EndSplineSet
 Refer: 82 111 N 1 0 0 1 -105 0 2
 EndChar
@@ -58546,21 +58546,21 @@
 LayerCount: 2
 Fore
 SplineSet
-829 1296 m 5
- 829 1415 l 5
- 890 1370 890 1370 934 1348.5 c 4
- 978 1327 978 1327 1009 1327 c 4
- 1055 1327 1055 1327 1078 1354.5 c 4
- 1101 1382 1101 1382 1101 1436 c 4
- 1101 1468 1101 1468 1093.5 1499 c 4
- 1086 1530 1086 1530 1071 1561 c 5
- 1204 1561 l 5
- 1214 1523 1214 1523 1219 1489 c 4
- 1224 1455 1224 1455 1224 1425 c 4
- 1224 1303 1224 1303 1180.5 1245.5 c 4
- 1137 1188 1137 1188 1044 1188 c 4
- 996 1188 996 1188 943.5 1214.5 c 4
- 891 1241 891 1241 829 1296 c 5
+829 1296 m 5,0,-1
+ 829 1415 l 5,1,2
+ 890 1370 890 1370 934 1348.5 c 4,3,4
+ 978 1327 978 1327 1009 1327 c 4,5,6
+ 1055 1327 1055 1327 1078 1354.5 c 4,7,8
+ 1101 1382 1101 1382 1101 1436 c 4,9,10
+ 1101 1468 1101 1468 1093.5 1499 c 4,11,12
+ 1086 1530 1086 1530 1071 1561 c 5,13,-1
+ 1204 1561 l 5,14,15
+ 1214 1523 1214 1523 1219 1489 c 4,16,17
+ 1224 1455 1224 1455 1224 1425 c 4,18,19
+ 1224 1303 1224 1303 1180.5 1245.5 c 4,20,21
+ 1137 1188 1137 1188 1044 1188 c 4,22,23
+ 996 1188 996 1188 943.5 1214.5 c 4,24,25
+ 891 1241 891 1241 829 1296 c 5,0,-1
 EndSplineSet
 Refer: 56 85 N 1 0 0 1 -138 0 2
 EndChar
@@ -58572,21 +58572,21 @@
 LayerCount: 2
 Fore
 SplineSet
-799 872 m 5
- 799 991 l 5
- 860 946 860 946 904 924.5 c 4
- 948 903 948 903 979 903 c 4
- 1025 903 1025 903 1048 930.5 c 4
- 1071 958 1071 958 1071 1012 c 4
- 1071 1044 1071 1044 1063.5 1075 c 4
- 1056 1106 1056 1106 1041 1137 c 5
- 1174 1137 l 5
- 1184 1099 1184 1099 1189 1065 c 4
- 1194 1031 1194 1031 1194 1001 c 4
- 1194 879 1194 879 1150.5 821.5 c 4
- 1107 764 1107 764 1014 764 c 4
- 966 764 966 764 913.5 790.5 c 4
- 861 817 861 817 799 872 c 5
+799 872 m 5,0,-1
+ 799 991 l 5,1,2
+ 860 946 860 946 904 924.5 c 4,3,4
+ 948 903 948 903 979 903 c 4,5,6
+ 1025 903 1025 903 1048 930.5 c 4,7,8
+ 1071 958 1071 958 1071 1012 c 4,9,10
+ 1071 1044 1071 1044 1063.5 1075 c 4,11,12
+ 1056 1106 1056 1106 1041 1137 c 5,13,-1
+ 1174 1137 l 5,14,15
+ 1184 1099 1184 1099 1189 1065 c 4,16,17
+ 1194 1031 1194 1031 1194 1001 c 4,18,19
+ 1194 879 1194 879 1150.5 821.5 c 4,20,21
+ 1107 764 1107 764 1014 764 c 4,22,23
+ 966 764 966 764 913.5 790.5 c 4,24,25
+ 861 817 861 817 799 872 c 5,0,-1
 EndSplineSet
 Refer: 88 117 N 1 0 0 1 -156 0 2
 EndChar
@@ -59133,14 +59133,14 @@
 LayerCount: 2
 Fore
 SplineSet
-522 1635 m 5
- 311 1901 l 5
- 451 1901 l 5
- 616 1723 l 5
- 782 1901 l 5
- 922 1901 l 5
- 711 1635 l 5
- 522 1635 l 5
+522 1635 m 5,0,-1
+ 311 1901 l 5,1,-1
+ 451 1901 l 5,2,-1
+ 616 1723 l 5,3,-1
+ 782 1901 l 5,4,-1
+ 922 1901 l 5,5,-1
+ 711 1635 l 5,6,-1
+ 522 1635 l 5,0,-1
 EndSplineSet
 Refer: 36 65 N 1 0 0 1 0 0 2
 EndChar
@@ -59162,14 +59162,14 @@
 LayerCount: 2
 Fore
 SplineSet
-522 1635 m 5
- 311 1901 l 5
- 451 1901 l 5
- 616 1723 l 5
- 782 1901 l 5
- 922 1901 l 5
- 711 1635 l 5
- 522 1635 l 5
+522 1635 m 5,0,-1
+ 311 1901 l 5,1,-1
+ 451 1901 l 5,2,-1
+ 616 1723 l 5,3,-1
+ 782 1901 l 5,4,-1
+ 922 1901 l 5,5,-1
+ 711 1635 l 5,6,-1
+ 522 1635 l 5,0,-1
 EndSplineSet
 Refer: 44 73 N 1 0 0 1 0 0 2
 EndChar
@@ -59191,14 +59191,14 @@
 LayerCount: 2
 Fore
 SplineSet
-522 1635 m 5
- 311 1901 l 5
- 451 1901 l 5
- 616 1723 l 5
- 782 1901 l 5
- 922 1901 l 5
- 711 1635 l 5
- 522 1635 l 5
+522 1635 m 5,0,-1
+ 311 1901 l 5,1,-1
+ 451 1901 l 5,2,-1
+ 616 1723 l 5,3,-1
+ 782 1901 l 5,4,-1
+ 922 1901 l 5,5,-1
+ 711 1635 l 5,6,-1
+ 522 1635 l 5,0,-1
 EndSplineSet
 Refer: 50 79 N 1 0 0 1 0 0 2
 EndChar
@@ -59220,14 +59220,14 @@
 LayerCount: 2
 Fore
 SplineSet
-522 1635 m 5
- 311 1901 l 5
- 451 1901 l 5
- 616 1723 l 5
- 782 1901 l 5
- 922 1901 l 5
- 711 1635 l 5
- 522 1635 l 5
+522 1635 m 5,0,-1
+ 311 1901 l 5,1,-1
+ 451 1901 l 5,2,-1
+ 616 1723 l 5,3,-1
+ 782 1901 l 5,4,-1
+ 922 1901 l 5,5,-1
+ 711 1635 l 5,6,-1
+ 522 1635 l 5,0,-1
 EndSplineSet
 Refer: 56 85 N 1 0 0 1 0 0 2
 EndChar
@@ -59249,16 +59249,16 @@
 LayerCount: 2
 Fore
 SplineSet
-319 1746 m 5
- 522 1746 l 5
- 522 1543 l 5
- 319 1543 l 5
- 319 1746 l 5
-711 1746 m 5
- 913 1746 l 5
- 913 1543 l 5
- 711 1543 l 5
- 711 1746 l 5
+319 1746 m 5,0,-1
+ 522 1746 l 5,1,-1
+ 522 1543 l 5,2,-1
+ 319 1543 l 5,3,-1
+ 319 1746 l 5,0,-1
+711 1746 m 5,4,-1
+ 913 1746 l 5,5,-1
+ 913 1543 l 5,6,-1
+ 711 1543 l 5,7,-1
+ 711 1746 l 5,4,-1
 EndSplineSet
 Refer: 56 85 N 1 0 0 1 0 0 2
 EndChar
@@ -59280,21 +59280,21 @@
 LayerCount: 2
 Fore
 SplineSet
-672 2041 m 5
- 858 2041 l 5
- 629 1777 l 5
- 475 1777 l 5
- 672 2041 l 5
-319 1746 m 5
- 522 1746 l 5
- 522 1543 l 5
- 319 1543 l 5
- 319 1746 l 5
-711 1746 m 5
- 913 1746 l 5
- 913 1543 l 5
- 711 1543 l 5
- 711 1746 l 5
+672 2041 m 5,0,-1
+ 858 2041 l 5,1,-1
+ 629 1777 l 5,2,-1
+ 475 1777 l 5,3,-1
+ 672 2041 l 5,0,-1
+319 1746 m 5,4,-1
+ 522 1746 l 5,5,-1
+ 522 1543 l 5,6,-1
+ 319 1543 l 5,7,-1
+ 319 1746 l 5,4,-1
+711 1746 m 5,8,-1
+ 913 1746 l 5,9,-1
+ 913 1543 l 5,10,-1
+ 711 1543 l 5,11,-1
+ 711 1746 l 5,8,-1
 EndSplineSet
 Refer: 56 85 N 1 0 0 1 0 0 2
 EndChar
@@ -59315,24 +59315,24 @@
 LayerCount: 2
 Fore
 SplineSet
-522 1777 m 5
- 311 2043 l 5
- 451 2043 l 5
- 616 1865 l 5
- 782 2043 l 5
- 922 2043 l 5
- 711 1777 l 5
- 522 1777 l 5
-319 1746 m 5
- 522 1746 l 5
- 522 1543 l 5
- 319 1543 l 5
- 319 1746 l 5
-711 1746 m 5
- 913 1746 l 5
- 913 1543 l 5
- 711 1543 l 5
- 711 1746 l 5
+522 1777 m 5,0,-1
+ 311 2043 l 5,1,-1
+ 451 2043 l 5,2,-1
+ 616 1865 l 5,3,-1
+ 782 2043 l 5,4,-1
+ 922 2043 l 5,5,-1
+ 711 1777 l 5,6,-1
+ 522 1777 l 5,0,-1
+319 1746 m 5,7,-1
+ 522 1746 l 5,8,-1
+ 522 1543 l 5,9,-1
+ 319 1543 l 5,10,-1
+ 319 1746 l 5,7,-1
+711 1746 m 5,11,-1
+ 913 1746 l 5,12,-1
+ 913 1543 l 5,13,-1
+ 711 1543 l 5,14,-1
+ 711 1746 l 5,11,-1
 EndSplineSet
 Refer: 56 85 N 1 0 0 1 0 0 2
 EndChar
@@ -59353,21 +59353,21 @@
 LayerCount: 2
 Fore
 SplineSet
-561 2041 m 5
- 758 1777 l 5
- 604 1777 l 5
- 377 2041 l 5
- 561 2041 l 5
-319 1746 m 5
- 522 1746 l 5
- 522 1543 l 5
- 319 1543 l 5
- 319 1746 l 5
-711 1746 m 5
- 913 1746 l 5
- 913 1543 l 5
- 711 1543 l 5
- 711 1746 l 5
+561 2041 m 5,0,-1
+ 758 1777 l 5,1,-1
+ 604 1777 l 5,2,-1
+ 377 2041 l 5,3,-1
+ 561 2041 l 5,0,-1
+319 1746 m 5,4,-1
+ 522 1746 l 5,5,-1
+ 522 1543 l 5,6,-1
+ 319 1543 l 5,7,-1
+ 319 1746 l 5,4,-1
+711 1746 m 5,8,-1
+ 913 1746 l 5,9,-1
+ 913 1543 l 5,10,-1
+ 711 1543 l 5,11,-1
+ 711 1746 l 5,8,-1
 EndSplineSet
 Refer: 56 85 N 1 0 0 1 0 0 2
 EndChar
@@ -59421,16 +59421,16 @@
 LayerCount: 2
 Fore
 SplineSet
-319 1746 m 5
- 522 1746 l 5
- 522 1543 l 5
- 319 1543 l 5
- 319 1746 l 5
-711 1746 m 5
- 913 1746 l 5
- 913 1543 l 5
- 711 1543 l 5
- 711 1746 l 5
+319 1746 m 5,0,-1
+ 522 1746 l 5,1,-1
+ 522 1543 l 5,2,-1
+ 319 1543 l 5,3,-1
+ 319 1746 l 5,0,-1
+711 1746 m 5,4,-1
+ 913 1746 l 5,5,-1
+ 913 1543 l 5,6,-1
+ 711 1543 l 5,7,-1
+ 711 1746 l 5,4,-1
 EndSplineSet
 Refer: 36 65 N 1 0 0 1 0 0 2
 EndChar
@@ -59452,11 +59452,11 @@
 LayerCount: 2
 Fore
 SplineSet
-513 1748 m 5
- 718 1748 l 5
- 718 1543 l 5
- 513 1543 l 5
- 513 1748 l 5
+513 1748 m 5,0,-1
+ 718 1748 l 5,1,-1
+ 718 1543 l 5,2,-1
+ 513 1543 l 5,3,-1
+ 513 1748 l 5,0,-1
 EndSplineSet
 Refer: 36 65 N 1 0 0 1 0 0 2
 EndChar
@@ -59477,11 +59477,11 @@
 LayerCount: 2
 Fore
 SplineSet
-487 1840 m 5
- 1085 1840 l 5
- 1085 1692 l 5
- 487 1692 l 5
- 487 1840 l 5
+487 1840 m 5,0,-1
+ 1085 1840 l 5,1,-1
+ 1085 1692 l 5,2,-1
+ 487 1692 l 5,3,-1
+ 487 1840 l 5,0,-1
 EndSplineSet
 Refer: 144 198 N 1 0 0 1 0 0 2
 EndChar
@@ -59493,11 +59493,11 @@
 LayerCount: 2
 Fore
 SplineSet
-317 1526 m 5
- 915 1526 l 5
- 915 1378 l 5
- 317 1378 l 5
- 317 1526 l 5
+317 1526 m 5,0,-1
+ 915 1526 l 5,1,-1
+ 915 1378 l 5,2,-1
+ 317 1378 l 5,3,-1
+ 317 1526 l 5,0,-1
 EndSplineSet
 Refer: 160 230 N 1 0 0 1 0 0 2
 EndChar
@@ -59509,14 +59509,14 @@
 LayerCount: 2
 Fore
 SplineSet
-522 1635 m 5
- 311 1901 l 5
- 451 1901 l 5
- 616 1723 l 5
- 782 1901 l 5
- 922 1901 l 5
- 711 1635 l 5
- 522 1635 l 5
+522 1635 m 5,0,-1
+ 311 1901 l 5,1,-1
+ 451 1901 l 5,2,-1
+ 616 1723 l 5,3,-1
+ 782 1901 l 5,4,-1
+ 922 1901 l 5,5,-1
+ 711 1635 l 5,6,-1
+ 522 1635 l 5,0,-1
 EndSplineSet
 Refer: 42 71 N 1 0 0 1 0 0 2
 EndChar
@@ -59538,14 +59538,14 @@
 LayerCount: 2
 Fore
 SplineSet
-522 1635 m 5
- 311 1901 l 5
- 451 1901 l 5
- 616 1723 l 5
- 782 1901 l 5
- 922 1901 l 5
- 711 1635 l 5
- 522 1635 l 5
+522 1635 m 5,0,-1
+ 311 1901 l 5,1,-1
+ 451 1901 l 5,2,-1
+ 616 1723 l 5,3,-1
+ 782 1901 l 5,4,-1
+ 922 1901 l 5,5,-1
+ 711 1635 l 5,6,-1
+ 522 1635 l 5,0,-1
 EndSplineSet
 Refer: 46 75 N 1 0 0 1 0 0 2
 EndChar
@@ -59557,14 +59557,14 @@
 LayerCount: 2
 Fore
 SplineSet
-522 1635 m 5
- 311 1901 l 5
- 451 1901 l 5
- 616 1723 l 5
- 782 1901 l 5
- 922 1901 l 5
- 711 1635 l 5
- 522 1635 l 5
+522 1635 m 5,0,-1
+ 311 1901 l 5,1,-1
+ 451 1901 l 5,2,-1
+ 616 1723 l 5,3,-1
+ 782 1901 l 5,4,-1
+ 922 1901 l 5,5,-1
+ 711 1635 l 5,6,-1
+ 522 1635 l 5,0,-1
 EndSplineSet
 Refer: 78 107 N 1 0 0 1 0 0 2
 EndChar
@@ -59596,11 +59596,11 @@
 LayerCount: 2
 Fore
 SplineSet
-317 1840 m 5
- 915 1840 l 5
- 915 1692 l 5
- 317 1692 l 5
- 317 1840 l 5
+317 1840 m 5,0,-1
+ 915 1840 l 5,1,-1
+ 915 1692 l 5,2,-1
+ 317 1692 l 5,3,-1
+ 317 1840 l 5,0,-1
 EndSplineSet
 Refer: 1299 490 N 1 0 0 1 0 0 2
 EndChar
@@ -59612,11 +59612,11 @@
 LayerCount: 2
 Fore
 SplineSet
-317 1526 m 5
- 915 1526 l 5
- 915 1378 l 5
- 317 1378 l 5
- 317 1526 l 5
+317 1526 m 5,0,-1
+ 915 1526 l 5,1,-1
+ 915 1378 l 5,2,-1
+ 317 1378 l 5,3,-1
+ 317 1526 l 5,0,-1
 EndSplineSet
 Refer: 1300 491 N 1 0 0 1 0 0 2
 EndChar
@@ -59628,14 +59628,14 @@
 LayerCount: 2
 Fore
 SplineSet
-522 1635 m 5
- 311 1901 l 5
- 451 1901 l 5
- 616 1723 l 5
- 782 1901 l 5
- 922 1901 l 5
- 711 1635 l 5
- 522 1635 l 5
+522 1635 m 5,0,-1
+ 311 1901 l 5,1,-1
+ 451 1901 l 5,2,-1
+ 616 1723 l 5,3,-1
+ 782 1901 l 5,4,-1
+ 922 1901 l 5,5,-1
+ 711 1635 l 5,6,-1
+ 522 1635 l 5,0,-1
 EndSplineSet
 Refer: 1259 439 N 1 0 0 1 0 0 2
 EndChar
@@ -59647,29 +59647,29 @@
 LayerCount: 2
 Fore
 SplineSet
-609 476 m 5
- 715 476 715 476 843 420 c 4
- 941 378 941 378 1027 269 c 4
- 1108 165 1108 165 1108 27 c 4
- 1108 -194 1108 -194 956 -315 c 4
- 804 -436 804 -436 524 -436 c 4
- 430 -436 430 -436 331 -418 c 4
- 231 -399 231 -399 125 -362 c 5
- 125 -167 l 5
- 209 -216 209 -216 309 -241 c 4
- 409 -266 409 -266 518 -266 c 4
- 708 -266 708 -266 807 -191 c 4
- 907 -116 907 -116 907 27 c 4
- 907 159 907 159 815 234 c 5
- 722 308 722 308 557 308 c 6
- 383 308 l 5
- 383 474 l 5
- 813 973 l 5
- 146 973 l 5
- 146 1120 l 5
- 1020 1120 l 5
- 1020 952 l 5
- 609 476 l 5
+609 476 m 5,0,1
+ 715 476 715 476 843 420 c 4,2,3
+ 941 378 941 378 1027 269 c 4,4,5
+ 1108 165 1108 165 1108 27 c 4,6,7
+ 1108 -194 1108 -194 956 -315 c 4,8,9
+ 804 -436 804 -436 524 -436 c 4,10,11
+ 430 -436 430 -436 331 -418 c 4,12,13
+ 231 -399 231 -399 125 -362 c 5,14,-1
+ 125 -167 l 5,15,16
+ 209 -216 209 -216 309 -241 c 4,17,18
+ 409 -266 409 -266 518 -266 c 4,19,20
+ 708 -266 708 -266 807 -191 c 4,21,22
+ 907 -116 907 -116 907 27 c 4,23,24
+ 907 159 907 159 815 234 c 5,25,26
+ 722 308 722 308 557 308 c 6,27,-1
+ 383 308 l 5,28,-1
+ 383 474 l 5,29,-1
+ 813 973 l 5,30,-1
+ 146 973 l 5,31,-1
+ 146 1120 l 5,32,-1
+ 1020 1120 l 5,33,-1
+ 1020 952 l 5,34,-1
+ 609 476 l 5,0,1
 EndSplineSet
 Refer: 224 711 N 1 0 0 1 0 0 2
 EndChar
@@ -59681,19 +59681,19 @@
 LayerCount: 2
 Fore
 SplineSet
-600 -20 m 6
- 600 977 l 5
- 283 977 l 5
- 283 1120 l 5
- 784 1120 l 5
- 784 -20 l 6
- 784 -215 784 -215 694.5 -320.5 c 4
- 605 -426 605 -426 440 -426 c 6
- 186 -426 l 5
- 186 -270 l 5
- 420 -270 l 6
- 510 -270 510 -270 555 -207.5 c 4
- 600 -145 600 -145 600 -20 c 6
+600 -20 m 6,0,-1
+ 600 977 l 5,1,-1
+ 283 977 l 5,2,-1
+ 283 1120 l 5,3,-1
+ 784 1120 l 5,4,-1
+ 784 -20 l 6,5,6
+ 784 -215 784 -215 694.5 -320.5 c 4,7,8
+ 605 -426 605 -426 440 -426 c 6,9,-1
+ 186 -426 l 5,10,-1
+ 186 -270 l 5,11,-1
+ 420 -270 l 6,12,13
+ 510 -270 510 -270 555 -207.5 c 4,14,15
+ 600 -145 600 -145 600 -20 c 6,0,-1
 EndSplineSet
 Refer: 224 711 N 1 0 0 1 35 -5 2
 EndChar
@@ -59705,11 +59705,11 @@
 LayerCount: 2
 Fore
 SplineSet
-762 1899 m 5
- 948 1899 l 5
- 719 1635 l 5
- 565 1635 l 5
- 762 1899 l 5
+762 1899 m 5,0,-1
+ 948 1899 l 5,1,-1
+ 719 1635 l 5,2,-1
+ 565 1635 l 5,3,-1
+ 762 1899 l 5,0,-1
 EndSplineSet
 Refer: 42 71 N 1 0 0 1 0 0 2
 EndChar
@@ -59764,11 +59764,11 @@
 LayerCount: 2
 Fore
 SplineSet
-561 1899 m 5
- 758 1635 l 5
- 604 1635 l 5
- 377 1899 l 5
- 561 1899 l 5
+561 1899 m 5,0,-1
+ 758 1635 l 5,1,-1
+ 604 1635 l 5,2,-1
+ 377 1899 l 5,3,-1
+ 561 1899 l 5,0,-1
 EndSplineSet
 Refer: 49 78 N 1 0 0 1 0 0 2
 EndChar
@@ -59790,11 +59790,11 @@
 LayerCount: 2
 Fore
 SplineSet
-912 1899 m 5
- 1098 1899 l 5
- 869 1635 l 5
- 715 1635 l 5
- 912 1899 l 5
+912 1899 m 5,0,-1
+ 1098 1899 l 5,1,-1
+ 869 1635 l 5,2,-1
+ 715 1635 l 5,3,-1
+ 912 1899 l 5,0,-1
 EndSplineSet
 Refer: 144 198 N 1 0 0 1 0 0 2
 EndChar
@@ -59816,11 +59816,11 @@
 LayerCount: 2
 Fore
 SplineSet
-672 1899 m 5
- 858 1899 l 5
- 629 1635 l 5
- 475 1635 l 5
- 672 1899 l 5
+672 1899 m 5,0,-1
+ 858 1899 l 5,1,-1
+ 629 1635 l 5,2,-1
+ 475 1635 l 5,3,-1
+ 672 1899 l 5,0,-1
 EndSplineSet
 Refer: 145 216 N 1 0 0 1 0 0 2
 EndChar
@@ -59842,16 +59842,16 @@
 LayerCount: 2
 Fore
 SplineSet
-373 1899 m 5
- 570 1635 l 5
- 416 1635 l 5
- 187 1899 l 5
- 373 1899 l 5
-692 1899 m 5
- 889 1635 l 5
- 735 1635 l 5
- 506 1899 l 5
- 692 1899 l 5
+373 1899 m 5,0,-1
+ 570 1635 l 5,1,-1
+ 416 1635 l 5,2,-1
+ 187 1899 l 5,3,-1
+ 373 1899 l 5,0,-1
+692 1899 m 5,4,-1
+ 889 1635 l 5,5,-1
+ 735 1635 l 5,6,-1
+ 506 1899 l 5,7,-1
+ 692 1899 l 5,4,-1
 EndSplineSet
 Refer: 36 65 N 1 0 0 1 0 0 2
 EndChar
@@ -59863,16 +59863,16 @@
 LayerCount: 2
 Fore
 SplineSet
-388 1638 m 5
- 593 1262 l 5
- 458 1262 l 5
- 210 1638 l 5
- 388 1638 l 5
-722 1638 m 5
- 912 1262 l 5
- 775 1262 l 5
- 552 1638 l 5
- 722 1638 l 5
+388 1638 m 5,0,-1
+ 593 1262 l 5,1,-1
+ 458 1262 l 5,2,-1
+ 210 1638 l 5,3,-1
+ 388 1638 l 5,0,-1
+722 1638 m 5,4,-1
+ 912 1262 l 5,5,-1
+ 775 1262 l 5,6,-1
+ 552 1638 l 5,7,-1
+ 722 1638 l 5,4,-1
 EndSplineSet
 Refer: 68 97 N 1 0 0 1 0 0 2
 EndChar
@@ -59884,17 +59884,17 @@
 LayerCount: 2
 Fore
 SplineSet
-303 1659 m 5
- 314 1779 314 1779 393 1840 c 4
- 472 1901 472 1901 616 1901 c 4
- 760 1901 760 1901 839.5 1839.5 c 4
- 919 1778 919 1778 930 1659 c 5
- 811 1659 l 5
- 796 1715 796 1715 747.5 1742.5 c 4
- 699 1770 699 1770 616 1770 c 4
- 534 1770 534 1770 484 1741.5 c 4
- 434 1713 434 1713 422 1659 c 5
- 303 1659 l 5
+303 1659 m 5,0,1
+ 314 1779 314 1779 393 1840 c 4,2,3
+ 472 1901 472 1901 616 1901 c 4,4,5
+ 760 1901 760 1901 839.5 1839.5 c 4,6,7
+ 919 1778 919 1778 930 1659 c 5,8,-1
+ 811 1659 l 5,9,10
+ 796 1715 796 1715 747.5 1742.5 c 4,11,12
+ 699 1770 699 1770 616 1770 c 4,13,14
+ 534 1770 534 1770 484 1741.5 c 4,15,16
+ 434 1713 434 1713 422 1659 c 5,17,-1
+ 303 1659 l 5,0,1
 EndSplineSet
 Refer: 36 65 N 1 0 0 1 0 0 2
 EndChar
@@ -59906,17 +59906,17 @@
 LayerCount: 2
 Fore
 SplineSet
-303 1321 m 5
- 314 1464 314 1464 393 1536 c 4
- 472 1608 472 1608 616 1608 c 4
- 761 1608 761 1608 840 1536 c 4
- 919 1464 919 1464 930 1321 c 5
- 811 1321 l 5
- 797 1397 797 1397 749 1434 c 4
- 701 1471 701 1471 616 1471 c 4
- 529 1471 529 1471 481 1434 c 4
- 433 1397 433 1397 422 1321 c 5
- 303 1321 l 5
+303 1321 m 5,0,1
+ 314 1464 314 1464 393 1536 c 4,2,3
+ 472 1608 472 1608 616 1608 c 4,4,5
+ 761 1608 761 1608 840 1536 c 4,6,7
+ 919 1464 919 1464 930 1321 c 5,8,-1
+ 811 1321 l 5,9,10
+ 797 1397 797 1397 749 1434 c 4,11,12
+ 701 1471 701 1471 616 1471 c 4,13,14
+ 529 1471 529 1471 481 1434 c 4,15,16
+ 433 1397 433 1397 422 1321 c 5,17,-1
+ 303 1321 l 5,0,1
 EndSplineSet
 Refer: 68 97 N 1 0 0 1 0 0 2
 EndChar
@@ -59928,16 +59928,16 @@
 LayerCount: 2
 Fore
 SplineSet
-373 1899 m 5
- 570 1635 l 5
- 416 1635 l 5
- 187 1899 l 5
- 373 1899 l 5
-692 1899 m 5
- 889 1635 l 5
- 735 1635 l 5
- 506 1899 l 5
- 692 1899 l 5
+373 1899 m 5,0,-1
+ 570 1635 l 5,1,-1
+ 416 1635 l 5,2,-1
+ 187 1899 l 5,3,-1
+ 373 1899 l 5,0,-1
+692 1899 m 5,4,-1
+ 889 1635 l 5,5,-1
+ 735 1635 l 5,6,-1
+ 506 1899 l 5,7,-1
+ 692 1899 l 5,4,-1
 EndSplineSet
 Refer: 40 69 N 1 0 0 1 0 0 2
 EndChar
@@ -59949,16 +59949,16 @@
 LayerCount: 2
 Fore
 SplineSet
-402 1638 m 5
- 607 1262 l 5
- 472 1262 l 5
- 224 1638 l 5
- 402 1638 l 5
-736 1638 m 5
- 926 1262 l 5
- 789 1262 l 5
- 566 1638 l 5
- 736 1638 l 5
+402 1638 m 5,0,-1
+ 607 1262 l 5,1,-1
+ 472 1262 l 5,2,-1
+ 224 1638 l 5,3,-1
+ 402 1638 l 5,0,-1
+736 1638 m 5,4,-1
+ 926 1262 l 5,5,-1
+ 789 1262 l 5,6,-1
+ 566 1638 l 5,7,-1
+ 736 1638 l 5,4,-1
 EndSplineSet
 Refer: 72 101 N 1 0 0 1 0 0 2
 EndChar
@@ -59970,17 +59970,17 @@
 LayerCount: 2
 Fore
 SplineSet
-303 1659 m 5
- 314 1779 314 1779 393 1840 c 4
- 472 1901 472 1901 616 1901 c 4
- 760 1901 760 1901 839.5 1839.5 c 4
- 919 1778 919 1778 930 1659 c 5
- 811 1659 l 5
- 796 1715 796 1715 747.5 1742.5 c 4
- 699 1770 699 1770 616 1770 c 4
- 534 1770 534 1770 484 1741.5 c 4
- 434 1713 434 1713 422 1659 c 5
- 303 1659 l 5
+303 1659 m 5,0,1
+ 314 1779 314 1779 393 1840 c 4,2,3
+ 472 1901 472 1901 616 1901 c 4,4,5
+ 760 1901 760 1901 839.5 1839.5 c 4,6,7
+ 919 1778 919 1778 930 1659 c 5,8,-1
+ 811 1659 l 5,9,10
+ 796 1715 796 1715 747.5 1742.5 c 4,11,12
+ 699 1770 699 1770 616 1770 c 4,13,14
+ 534 1770 534 1770 484 1741.5 c 4,15,16
+ 434 1713 434 1713 422 1659 c 5,17,-1
+ 303 1659 l 5,0,1
 EndSplineSet
 Refer: 40 69 N 1 0 0 1 0 0 2
 EndChar
@@ -59992,17 +59992,17 @@
 LayerCount: 2
 Fore
 SplineSet
-317 1321 m 5
- 328 1464 328 1464 407 1536 c 4
- 486 1608 486 1608 630 1608 c 4
- 775 1608 775 1608 854 1536 c 4
- 933 1464 933 1464 944 1321 c 5
- 825 1321 l 5
- 811 1397 811 1397 763 1434 c 4
- 715 1471 715 1471 630 1471 c 4
- 543 1471 543 1471 495 1434 c 4
- 447 1397 447 1397 436 1321 c 5
- 317 1321 l 5
+317 1321 m 5,0,1
+ 328 1464 328 1464 407 1536 c 4,2,3
+ 486 1608 486 1608 630 1608 c 4,4,5
+ 775 1608 775 1608 854 1536 c 4,6,7
+ 933 1464 933 1464 944 1321 c 5,8,-1
+ 825 1321 l 5,9,10
+ 811 1397 811 1397 763 1434 c 4,11,12
+ 715 1471 715 1471 630 1471 c 4,13,14
+ 543 1471 543 1471 495 1434 c 4,15,16
+ 447 1397 447 1397 436 1321 c 5,17,-1
+ 317 1321 l 5,0,1
 EndSplineSet
 Refer: 72 101 N 1 0 0 1 0 0 2
 EndChar
@@ -60014,16 +60014,16 @@
 LayerCount: 2
 Fore
 SplineSet
-373 1899 m 5
- 570 1635 l 5
- 416 1635 l 5
- 187 1899 l 5
- 373 1899 l 5
-692 1899 m 5
- 889 1635 l 5
- 735 1635 l 5
- 506 1899 l 5
- 692 1899 l 5
+373 1899 m 5,0,-1
+ 570 1635 l 5,1,-1
+ 416 1635 l 5,2,-1
+ 187 1899 l 5,3,-1
+ 373 1899 l 5,0,-1
+692 1899 m 5,4,-1
+ 889 1635 l 5,5,-1
+ 735 1635 l 5,6,-1
+ 506 1899 l 5,7,-1
+ 692 1899 l 5,4,-1
 EndSplineSet
 Refer: 44 73 N 1 0 0 1 0 0 2
 EndChar
@@ -60035,16 +60035,16 @@
 LayerCount: 2
 Fore
 SplineSet
-388 1638 m 5
- 593 1262 l 5
- 458 1262 l 5
- 210 1638 l 5
- 388 1638 l 5
-722 1638 m 5
- 912 1262 l 5
- 775 1262 l 5
- 552 1638 l 5
- 722 1638 l 5
+388 1638 m 5,0,-1
+ 593 1262 l 5,1,-1
+ 458 1262 l 5,2,-1
+ 210 1638 l 5,3,-1
+ 388 1638 l 5,0,-1
+722 1638 m 5,4,-1
+ 912 1262 l 5,5,-1
+ 775 1262 l 5,6,-1
+ 552 1638 l 5,7,-1
+ 722 1638 l 5,4,-1
 EndSplineSet
 Refer: 214 305 N 1 0 0 1 0 0 2
 EndChar
@@ -60056,17 +60056,17 @@
 LayerCount: 2
 Fore
 SplineSet
-303 1659 m 5
- 314 1779 314 1779 393 1840 c 4
- 472 1901 472 1901 616 1901 c 4
- 760 1901 760 1901 839.5 1839.5 c 4
- 919 1778 919 1778 930 1659 c 5
- 811 1659 l 5
- 796 1715 796 1715 747.5 1742.5 c 4
- 699 1770 699 1770 616 1770 c 4
- 534 1770 534 1770 484 1741.5 c 4
- 434 1713 434 1713 422 1659 c 5
- 303 1659 l 5
+303 1659 m 5,0,1
+ 314 1779 314 1779 393 1840 c 4,2,3
+ 472 1901 472 1901 616 1901 c 4,4,5
+ 760 1901 760 1901 839.5 1839.5 c 4,6,7
+ 919 1778 919 1778 930 1659 c 5,8,-1
+ 811 1659 l 5,9,10
+ 796 1715 796 1715 747.5 1742.5 c 4,11,12
+ 699 1770 699 1770 616 1770 c 4,13,14
+ 534 1770 534 1770 484 1741.5 c 4,15,16
+ 434 1713 434 1713 422 1659 c 5,17,-1
+ 303 1659 l 5,0,1
 EndSplineSet
 Refer: 44 73 N 1 0 0 1 0 0 2
 EndChar
@@ -60078,17 +60078,17 @@
 LayerCount: 2
 Fore
 SplineSet
-303 1321 m 5
- 314 1464 314 1464 393 1536 c 4
- 472 1608 472 1608 616 1608 c 4
- 761 1608 761 1608 840 1536 c 4
- 919 1464 919 1464 930 1321 c 5
- 811 1321 l 5
- 797 1397 797 1397 749 1434 c 4
- 701 1471 701 1471 616 1471 c 4
- 529 1471 529 1471 481 1434 c 4
- 433 1397 433 1397 422 1321 c 5
- 303 1321 l 5
+303 1321 m 5,0,1
+ 314 1464 314 1464 393 1536 c 4,2,3
+ 472 1608 472 1608 616 1608 c 4,4,5
+ 761 1608 761 1608 840 1536 c 4,6,7
+ 919 1464 919 1464 930 1321 c 5,8,-1
+ 811 1321 l 5,9,10
+ 797 1397 797 1397 749 1434 c 4,11,12
+ 701 1471 701 1471 616 1471 c 4,13,14
+ 529 1471 529 1471 481 1434 c 4,15,16
+ 433 1397 433 1397 422 1321 c 5,17,-1
+ 303 1321 l 5,0,1
 EndSplineSet
 Refer: 214 305 N 1 0 0 1 0 0 2
 EndChar
@@ -60100,16 +60100,16 @@
 LayerCount: 2
 Fore
 SplineSet
-373 1899 m 5
- 570 1635 l 5
- 416 1635 l 5
- 187 1899 l 5
- 373 1899 l 5
-692 1899 m 5
- 889 1635 l 5
- 735 1635 l 5
- 506 1899 l 5
- 692 1899 l 5
+373 1899 m 5,0,-1
+ 570 1635 l 5,1,-1
+ 416 1635 l 5,2,-1
+ 187 1899 l 5,3,-1
+ 373 1899 l 5,0,-1
+692 1899 m 5,4,-1
+ 889 1635 l 5,5,-1
+ 735 1635 l 5,6,-1
+ 506 1899 l 5,7,-1
+ 692 1899 l 5,4,-1
 EndSplineSet
 Refer: 50 79 N 1 0 0 1 0 0 2
 EndChar
@@ -60121,16 +60121,16 @@
 LayerCount: 2
 Fore
 SplineSet
-388 1638 m 5
- 593 1262 l 5
- 458 1262 l 5
- 210 1638 l 5
- 388 1638 l 5
-722 1638 m 5
- 912 1262 l 5
- 775 1262 l 5
- 552 1638 l 5
- 722 1638 l 5
+388 1638 m 5,0,-1
+ 593 1262 l 5,1,-1
+ 458 1262 l 5,2,-1
+ 210 1638 l 5,3,-1
+ 388 1638 l 5,0,-1
+722 1638 m 5,4,-1
+ 912 1262 l 5,5,-1
+ 775 1262 l 5,6,-1
+ 552 1638 l 5,7,-1
+ 722 1638 l 5,4,-1
 EndSplineSet
 Refer: 82 111 N 1 0 0 1 0 0 2
 EndChar
@@ -60142,17 +60142,17 @@
 LayerCount: 2
 Fore
 SplineSet
-303 1659 m 5
- 314 1779 314 1779 393 1840 c 4
- 472 1901 472 1901 616 1901 c 4
- 760 1901 760 1901 839.5 1839.5 c 4
- 919 1778 919 1778 930 1659 c 5
- 811 1659 l 5
- 796 1715 796 1715 747.5 1742.5 c 4
- 699 1770 699 1770 616 1770 c 4
- 534 1770 534 1770 484 1741.5 c 4
- 434 1713 434 1713 422 1659 c 5
- 303 1659 l 5
+303 1659 m 5,0,1
+ 314 1779 314 1779 393 1840 c 4,2,3
+ 472 1901 472 1901 616 1901 c 4,4,5
+ 760 1901 760 1901 839.5 1839.5 c 4,6,7
+ 919 1778 919 1778 930 1659 c 5,8,-1
+ 811 1659 l 5,9,10
+ 796 1715 796 1715 747.5 1742.5 c 4,11,12
+ 699 1770 699 1770 616 1770 c 4,13,14
+ 534 1770 534 1770 484 1741.5 c 4,15,16
+ 434 1713 434 1713 422 1659 c 5,17,-1
+ 303 1659 l 5,0,1
 EndSplineSet
 Refer: 50 79 N 1 0 0 1 0 0 2
 EndChar
@@ -60164,17 +60164,17 @@
 LayerCount: 2
 Fore
 SplineSet
-303 1321 m 5
- 314 1464 314 1464 393 1536 c 4
- 472 1608 472 1608 616 1608 c 4
- 761 1608 761 1608 840 1536 c 4
- 919 1464 919 1464 930 1321 c 5
- 811 1321 l 5
- 797 1397 797 1397 749 1434 c 4
- 701 1471 701 1471 616 1471 c 4
- 529 1471 529 1471 481 1434 c 4
- 433 1397 433 1397 422 1321 c 5
- 303 1321 l 5
+303 1321 m 5,0,1
+ 314 1464 314 1464 393 1536 c 4,2,3
+ 472 1608 472 1608 616 1608 c 4,4,5
+ 761 1608 761 1608 840 1536 c 4,6,7
+ 919 1464 919 1464 930 1321 c 5,8,-1
+ 811 1321 l 5,9,10
+ 797 1397 797 1397 749 1434 c 4,11,12
+ 701 1471 701 1471 616 1471 c 4,13,14
+ 529 1471 529 1471 481 1434 c 4,15,16
+ 433 1397 433 1397 422 1321 c 5,17,-1
+ 303 1321 l 5,0,1
 EndSplineSet
 Refer: 82 111 N 1 0 0 1 0 0 2
 EndChar
@@ -60186,16 +60186,16 @@
 LayerCount: 2
 Fore
 SplineSet
-323 1899 m 5
- 520 1635 l 5
- 366 1635 l 5
- 137 1899 l 5
- 323 1899 l 5
-642 1899 m 5
- 839 1635 l 5
- 685 1635 l 5
- 456 1899 l 5
- 642 1899 l 5
+323 1899 m 5,0,-1
+ 520 1635 l 5,1,-1
+ 366 1635 l 5,2,-1
+ 137 1899 l 5,3,-1
+ 323 1899 l 5,0,-1
+642 1899 m 5,4,-1
+ 839 1635 l 5,5,-1
+ 685 1635 l 5,6,-1
+ 456 1899 l 5,7,-1
+ 642 1899 l 5,4,-1
 EndSplineSet
 Refer: 53 82 N 1 0 0 1 0 0 2
 EndChar
@@ -60207,16 +60207,16 @@
 LayerCount: 2
 Fore
 SplineSet
-538 1638 m 5
- 743 1262 l 5
- 608 1262 l 5
- 360 1638 l 5
- 538 1638 l 5
-872 1638 m 5
- 1062 1262 l 5
- 925 1262 l 5
- 702 1638 l 5
- 872 1638 l 5
+538 1638 m 5,0,-1
+ 743 1262 l 5,1,-1
+ 608 1262 l 5,2,-1
+ 360 1638 l 5,3,-1
+ 538 1638 l 5,0,-1
+872 1638 m 5,4,-1
+ 1062 1262 l 5,5,-1
+ 925 1262 l 5,6,-1
+ 702 1638 l 5,7,-1
+ 872 1638 l 5,4,-1
 EndSplineSet
 Refer: 85 114 N 1 0 0 1 0 0 2
 EndChar
@@ -60228,17 +60228,17 @@
 LayerCount: 2
 Fore
 SplineSet
-253 1659 m 5
- 264 1779 264 1779 343 1840 c 4
- 422 1901 422 1901 566 1901 c 4
- 710 1901 710 1901 789.5 1839.5 c 4
- 869 1778 869 1778 880 1659 c 5
- 761 1659 l 5
- 746 1715 746 1715 697.5 1742.5 c 4
- 649 1770 649 1770 566 1770 c 4
- 484 1770 484 1770 434 1741.5 c 4
- 384 1713 384 1713 372 1659 c 5
- 253 1659 l 5
+253 1659 m 5,0,1
+ 264 1779 264 1779 343 1840 c 4,2,3
+ 422 1901 422 1901 566 1901 c 4,4,5
+ 710 1901 710 1901 789.5 1839.5 c 4,6,7
+ 869 1778 869 1778 880 1659 c 5,8,-1
+ 761 1659 l 5,9,10
+ 746 1715 746 1715 697.5 1742.5 c 4,11,12
+ 649 1770 649 1770 566 1770 c 4,13,14
+ 484 1770 484 1770 434 1741.5 c 4,15,16
+ 384 1713 384 1713 372 1659 c 5,17,-1
+ 253 1659 l 5,0,1
 EndSplineSet
 Refer: 53 82 N 1 0 0 1 0 0 2
 EndChar
@@ -60250,17 +60250,17 @@
 LayerCount: 2
 Fore
 SplineSet
-453 1321 m 5
- 464 1464 464 1464 543 1536 c 4
- 622 1608 622 1608 766 1608 c 4
- 911 1608 911 1608 990 1536 c 4
- 1069 1464 1069 1464 1080 1321 c 5
- 961 1321 l 5
- 947 1397 947 1397 899 1434 c 4
- 851 1471 851 1471 766 1471 c 4
- 679 1471 679 1471 631 1434 c 4
- 583 1397 583 1397 572 1321 c 5
- 453 1321 l 5
+453 1321 m 5,0,1
+ 464 1464 464 1464 543 1536 c 4,2,3
+ 622 1608 622 1608 766 1608 c 4,4,5
+ 911 1608 911 1608 990 1536 c 4,6,7
+ 1069 1464 1069 1464 1080 1321 c 5,8,-1
+ 961 1321 l 5,9,10
+ 947 1397 947 1397 899 1434 c 4,11,12
+ 851 1471 851 1471 766 1471 c 4,13,14
+ 679 1471 679 1471 631 1434 c 4,15,16
+ 583 1397 583 1397 572 1321 c 5,17,-1
+ 453 1321 l 5,0,1
 EndSplineSet
 Refer: 85 114 N 1 0 0 1 0 0 2
 EndChar
@@ -60272,16 +60272,16 @@
 LayerCount: 2
 Fore
 SplineSet
-373 1899 m 5
- 570 1635 l 5
- 416 1635 l 5
- 187 1899 l 5
- 373 1899 l 5
-692 1899 m 5
- 889 1635 l 5
- 735 1635 l 5
- 506 1899 l 5
- 692 1899 l 5
+373 1899 m 5,0,-1
+ 570 1635 l 5,1,-1
+ 416 1635 l 5,2,-1
+ 187 1899 l 5,3,-1
+ 373 1899 l 5,0,-1
+692 1899 m 5,4,-1
+ 889 1635 l 5,5,-1
+ 735 1635 l 5,6,-1
+ 506 1899 l 5,7,-1
+ 692 1899 l 5,4,-1
 EndSplineSet
 Refer: 56 85 N 1 0 0 1 0 0 2
 EndChar
@@ -60293,16 +60293,16 @@
 LayerCount: 2
 Fore
 SplineSet
-388 1638 m 5
- 593 1262 l 5
- 458 1262 l 5
- 210 1638 l 5
- 388 1638 l 5
-722 1638 m 5
- 912 1262 l 5
- 775 1262 l 5
- 552 1638 l 5
- 722 1638 l 5
+388 1638 m 5,0,-1
+ 593 1262 l 5,1,-1
+ 458 1262 l 5,2,-1
+ 210 1638 l 5,3,-1
+ 388 1638 l 5,0,-1
+722 1638 m 5,4,-1
+ 912 1262 l 5,5,-1
+ 775 1262 l 5,6,-1
+ 552 1638 l 5,7,-1
+ 722 1638 l 5,4,-1
 EndSplineSet
 Refer: 88 117 N 1 0 0 1 0 0 2
 EndChar
@@ -60314,17 +60314,17 @@
 LayerCount: 2
 Fore
 SplineSet
-303 1659 m 5
- 314 1779 314 1779 393 1840 c 4
- 472 1901 472 1901 616 1901 c 4
- 760 1901 760 1901 839.5 1839.5 c 4
- 919 1778 919 1778 930 1659 c 5
- 811 1659 l 5
- 796 1715 796 1715 747.5 1742.5 c 4
- 699 1770 699 1770 616 1770 c 4
- 534 1770 534 1770 484 1741.5 c 4
- 434 1713 434 1713 422 1659 c 5
- 303 1659 l 5
+303 1659 m 5,0,1
+ 314 1779 314 1779 393 1840 c 4,2,3
+ 472 1901 472 1901 616 1901 c 4,4,5
+ 760 1901 760 1901 839.5 1839.5 c 4,6,7
+ 919 1778 919 1778 930 1659 c 5,8,-1
+ 811 1659 l 5,9,10
+ 796 1715 796 1715 747.5 1742.5 c 4,11,12
+ 699 1770 699 1770 616 1770 c 4,13,14
+ 534 1770 534 1770 484 1741.5 c 4,15,16
+ 434 1713 434 1713 422 1659 c 5,17,-1
+ 303 1659 l 5,0,1
 EndSplineSet
 Refer: 56 85 N 1 0 0 1 0 0 2
 EndChar
@@ -60336,17 +60336,17 @@
 LayerCount: 2
 Fore
 SplineSet
-303 1321 m 5
- 314 1464 314 1464 393 1536 c 4
- 472 1608 472 1608 616 1608 c 4
- 761 1608 761 1608 840 1536 c 4
- 919 1464 919 1464 930 1321 c 5
- 811 1321 l 5
- 797 1397 797 1397 749 1434 c 4
- 701 1471 701 1471 616 1471 c 4
- 529 1471 529 1471 481 1434 c 4
- 433 1397 433 1397 422 1321 c 5
- 303 1321 l 5
+303 1321 m 5,0,1
+ 314 1464 314 1464 393 1536 c 4,2,3
+ 472 1608 472 1608 616 1608 c 4,4,5
+ 761 1608 761 1608 840 1536 c 4,6,7
+ 919 1464 919 1464 930 1321 c 5,8,-1
+ 811 1321 l 5,9,10
+ 797 1397 797 1397 749 1434 c 4,11,12
+ 701 1471 701 1471 616 1471 c 4,13,14
+ 529 1471 529 1471 481 1434 c 4,15,16
+ 433 1397 433 1397 422 1321 c 5,17,-1
+ 303 1321 l 5,0,1
 EndSplineSet
 Refer: 88 117 N 1 0 0 1 0 0 2
 EndChar
@@ -60358,11 +60358,11 @@
 LayerCount: 2
 Fore
 SplineSet
-502 -197 m 5
- 741 -197 l 5
- 554 -542 l 5
- 408 -542 l 5
- 502 -197 l 5
+502 -197 m 5,0,-1
+ 741 -197 l 5,1,-1
+ 554 -542 l 5,2,-1
+ 408 -542 l 5,3,-1
+ 502 -197 l 5,0,-1
 EndSplineSet
 Refer: 54 83 N 1 0 0 1 0 0 2
 EndChar
@@ -60374,11 +60374,11 @@
 LayerCount: 2
 Fore
 SplineSet
-502 -197 m 5
- 741 -197 l 5
- 554 -542 l 5
- 408 -542 l 5
- 502 -197 l 5
+502 -197 m 5,0,-1
+ 741 -197 l 5,1,-1
+ 554 -542 l 5,2,-1
+ 408 -542 l 5,3,-1
+ 502 -197 l 5,0,-1
 EndSplineSet
 Refer: 86 115 N 1 0 0 1 0 0 2
 EndChar
@@ -60390,11 +60390,11 @@
 LayerCount: 2
 Fore
 SplineSet
-502 -197 m 5
- 741 -197 l 5
- 554 -542 l 5
- 408 -542 l 5
- 502 -197 l 5
+502 -197 m 5,0,-1
+ 741 -197 l 5,1,-1
+ 554 -542 l 5,2,-1
+ 408 -542 l 5,3,-1
+ 502 -197 l 5,0,-1
 EndSplineSet
 Refer: 55 84 N 1 0 0 1 0 0 2
 EndChar
@@ -60406,11 +60406,11 @@
 LayerCount: 2
 Fore
 SplineSet
-591 -197 m 5
- 830 -197 l 5
- 643 -542 l 5
- 497 -542 l 5
- 591 -197 l 5
+591 -197 m 5,0,-1
+ 830 -197 l 5,1,-1
+ 643 -542 l 5,2,-1
+ 497 -542 l 5,3,-1
+ 591 -197 l 5,0,-1
 EndSplineSet
 Refer: 87 116 N 1 0 0 1 0 0 2
 EndChar
@@ -60522,14 +60522,14 @@
 LayerCount: 2
 Fore
 SplineSet
-522 1635 m 5
- 311 1901 l 5
- 451 1901 l 5
- 616 1723 l 5
- 782 1901 l 5
- 922 1901 l 5
- 711 1635 l 5
- 522 1635 l 5
+522 1635 m 5,0,-1
+ 311 1901 l 5,1,-1
+ 451 1901 l 5,2,-1
+ 616 1723 l 5,3,-1
+ 782 1901 l 5,4,-1
+ 922 1901 l 5,5,-1
+ 711 1635 l 5,6,-1
+ 522 1635 l 5,0,-1
 EndSplineSet
 Refer: 43 72 N 1 0 0 1 0 0 2
 EndChar
@@ -60541,14 +60541,14 @@
 LayerCount: 2
 Fore
 SplineSet
-522 1635 m 5
- 311 1901 l 5
- 451 1901 l 5
- 616 1723 l 5
- 782 1901 l 5
- 922 1901 l 5
- 711 1635 l 5
- 522 1635 l 5
+522 1635 m 5,0,-1
+ 311 1901 l 5,1,-1
+ 451 1901 l 5,2,-1
+ 616 1723 l 5,3,-1
+ 782 1901 l 5,4,-1
+ 922 1901 l 5,5,-1
+ 711 1635 l 5,6,-1
+ 522 1635 l 5,0,-1
 EndSplineSet
 Refer: 75 104 N 1 0 0 1 0 0 2
 EndChar
@@ -60695,11 +60695,11 @@
 LayerCount: 2
 Fore
 SplineSet
-513 1872 m 5
- 718 1872 l 5
- 718 1667 l 5
- 513 1667 l 5
- 513 1872 l 5
+513 1872 m 5,0,-1
+ 718 1872 l 5,1,-1
+ 718 1667 l 5,2,-1
+ 513 1667 l 5,3,-1
+ 513 1872 l 5,0,-1
 EndSplineSet
 Refer: 36 65 N 1 0 0 1 0 0 2
 EndChar
@@ -60711,11 +60711,11 @@
 LayerCount: 2
 Fore
 SplineSet
-513 1552 m 5
- 718 1552 l 5
- 718 1348 l 5
- 513 1348 l 5
- 513 1552 l 5
+513 1552 m 5,0,-1
+ 718 1552 l 5,1,-1
+ 718 1348 l 5,2,-1
+ 513 1348 l 5,3,-1
+ 513 1552 l 5,0,-1
 EndSplineSet
 Refer: 68 97 N 1 0 0 1 0 0 2
 EndChar
@@ -60727,21 +60727,21 @@
 LayerCount: 2
 Fore
 SplineSet
-750 0 m 5
- 806 -62 806 -62 832.5 -114.5 c 4
- 859 -167 859 -167 859 -215 c 4
- 859 -304 859 -304 799 -349.5 c 4
- 739 -395 739 -395 621 -395 c 4
- 576 -395 576 -395 532.5 -389 c 4
- 489 -383 489 -383 445 -371 c 5
- 445 -240 l 5
- 479 -257 479 -257 516.5 -264.5 c 4
- 554 -272 554 -272 601 -272 c 4
- 659 -272 659 -272 689.5 -248 c 4
- 720 -224 720 -224 720 -178 c 4
- 720 -148 720 -148 698 -104.5 c 4
- 676 -61 676 -61 632 0 c 5
- 750 0 l 5
+750 0 m 5,0,1
+ 806 -62 806 -62 832.5 -114.5 c 4,2,3
+ 859 -167 859 -167 859 -215 c 4,4,5
+ 859 -304 859 -304 799 -349.5 c 4,6,7
+ 739 -395 739 -395 621 -395 c 4,8,9
+ 576 -395 576 -395 532.5 -389 c 4,10,11
+ 489 -383 489 -383 445 -371 c 5,12,-1
+ 445 -240 l 5,13,14
+ 479 -257 479 -257 516.5 -264.5 c 4,15,16
+ 554 -272 554 -272 601 -272 c 4,17,18
+ 659 -272 659 -272 689.5 -248 c 4,19,20
+ 720 -224 720 -224 720 -178 c 4,21,22
+ 720 -148 720 -148 698 -104.5 c 4,23,24
+ 676 -61 676 -61 632 0 c 5,25,-1
+ 750 0 l 5,0,1
 EndSplineSet
 Refer: 40 69 N 1 0 0 1 0 0 2
 EndChar
@@ -60753,21 +60753,21 @@
 LayerCount: 2
 Fore
 SplineSet
-750 0 m 5
- 806 -62 806 -62 832.5 -114.5 c 4
- 859 -167 859 -167 859 -215 c 4
- 859 -304 859 -304 799 -349.5 c 4
- 739 -395 739 -395 621 -395 c 4
- 576 -395 576 -395 532.5 -389 c 4
- 489 -383 489 -383 445 -371 c 5
- 445 -240 l 5
- 479 -257 479 -257 516.5 -264.5 c 4
- 554 -272 554 -272 601 -272 c 4
- 659 -272 659 -272 689.5 -248 c 4
- 720 -224 720 -224 720 -178 c 4
- 720 -148 720 -148 698 -104.5 c 4
- 676 -61 676 -61 632 0 c 5
- 750 0 l 5
+750 0 m 5,0,1
+ 806 -62 806 -62 832.5 -114.5 c 4,2,3
+ 859 -167 859 -167 859 -215 c 4,4,5
+ 859 -304 859 -304 799 -349.5 c 4,6,7
+ 739 -395 739 -395 621 -395 c 4,8,9
+ 576 -395 576 -395 532.5 -389 c 4,10,11
+ 489 -383 489 -383 445 -371 c 5,12,-1
+ 445 -240 l 5,13,14
+ 479 -257 479 -257 516.5 -264.5 c 4,15,16
+ 554 -272 554 -272 601 -272 c 4,17,18
+ 659 -272 659 -272 689.5 -248 c 4,19,20
+ 720 -224 720 -224 720 -178 c 4,21,22
+ 720 -148 720 -148 698 -104.5 c 4,23,24
+ 676 -61 676 -61 632 0 c 5,25,-1
+ 750 0 l 5,0,1
 EndSplineSet
 Refer: 72 101 N 1 0 0 1 0 0 2
 EndChar
@@ -60779,16 +60779,16 @@
 LayerCount: 2
 Fore
 SplineSet
-319 1746 m 5
- 522 1746 l 5
- 522 1543 l 5
- 319 1543 l 5
- 319 1746 l 5
-711 1746 m 5
- 913 1746 l 5
- 913 1543 l 5
- 711 1543 l 5
- 711 1746 l 5
+319 1746 m 5,0,-1
+ 522 1746 l 5,1,-1
+ 522 1543 l 5,2,-1
+ 319 1543 l 5,3,-1
+ 319 1746 l 5,0,-1
+711 1746 m 5,4,-1
+ 913 1746 l 5,5,-1
+ 913 1543 l 5,6,-1
+ 711 1543 l 5,7,-1
+ 711 1746 l 5,4,-1
 EndSplineSet
 Refer: 50 79 N 1 0 0 1 0 0 2
 EndChar
@@ -60810,29 +60810,29 @@
 LayerCount: 2
 Fore
 SplineSet
-612 1582 m 5
- 555 1615 l 6
- 530 1629 530 1629 514.5 1634.5 c 4
- 499 1640 499 1640 487 1640 c 4
- 452 1640 452 1640 432 1615 c 4
- 412 1590 412 1590 412 1545 c 6
- 412 1539 l 5
- 287 1539 l 5
- 287 1640 287 1640 338.5 1699 c 4
- 390 1758 390 1758 475 1758 c 4
- 511 1758 511 1758 541.5 1750 c 4
- 572 1742 572 1742 621 1715 c 5
- 678 1685 l 5
- 700 1672 700 1672 717.5 1666 c 4
- 735 1660 735 1660 750 1660 c 4
- 781 1660 781 1660 801 1685.5 c 4
- 821 1711 821 1711 821 1752 c 6
- 821 1758 l 5
- 946 1758 l 5
- 944 1658 944 1658 893 1598.5 c 4
- 842 1539 842 1539 758 1539 c 4
- 724 1539 724 1539 694 1547 c 4
- 664 1555 664 1555 612 1582 c 5
+612 1582 m 5,0,-1
+ 555 1615 l 6,1,2
+ 530 1629 530 1629 514.5 1634.5 c 4,3,4
+ 499 1640 499 1640 487 1640 c 4,5,6
+ 452 1640 452 1640 432 1615 c 4,7,8
+ 412 1590 412 1590 412 1545 c 6,9,-1
+ 412 1539 l 5,10,-1
+ 287 1539 l 5,11,12
+ 287 1640 287 1640 338.5 1699 c 4,13,14
+ 390 1758 390 1758 475 1758 c 4,15,16
+ 511 1758 511 1758 541.5 1750 c 4,17,18
+ 572 1742 572 1742 621 1715 c 5,19,-1
+ 678 1685 l 5,20,21
+ 700 1672 700 1672 717.5 1666 c 4,22,23
+ 735 1660 735 1660 750 1660 c 4,24,25
+ 781 1660 781 1660 801 1685.5 c 4,26,27
+ 821 1711 821 1711 821 1752 c 6,28,-1
+ 821 1758 l 5,29,-1
+ 946 1758 l 5,30,31
+ 944 1658 944 1658 893 1598.5 c 4,32,33
+ 842 1539 842 1539 758 1539 c 4,34,35
+ 724 1539 724 1539 694 1547 c 4,36,37
+ 664 1555 664 1555 612 1582 c 5,0,-1
 EndSplineSet
 Refer: 50 79 N 1 0 0 1 0 0 2
 EndChar
@@ -60854,11 +60854,11 @@
 LayerCount: 2
 Fore
 SplineSet
-513 1872 m 5
- 718 1872 l 5
- 718 1667 l 5
- 513 1667 l 5
- 513 1872 l 5
+513 1872 m 5,0,-1
+ 718 1872 l 5,1,-1
+ 718 1667 l 5,2,-1
+ 513 1667 l 5,3,-1
+ 513 1872 l 5,0,-1
 EndSplineSet
 Refer: 50 79 N 1 0 0 1 0 0 2
 EndChar
@@ -60870,11 +60870,11 @@
 LayerCount: 2
 Fore
 SplineSet
-513 1552 m 5
- 718 1552 l 5
- 718 1348 l 5
- 513 1348 l 5
- 513 1552 l 5
+513 1552 m 5,0,-1
+ 718 1552 l 5,1,-1
+ 718 1348 l 5,2,-1
+ 513 1348 l 5,3,-1
+ 513 1552 l 5,0,-1
 EndSplineSet
 Refer: 82 111 N 1 0 0 1 0 0 2
 EndChar
@@ -60886,11 +60886,11 @@
 LayerCount: 2
 Fore
 SplineSet
-513 1748 m 5
- 718 1748 l 5
- 718 1543 l 5
- 513 1543 l 5
- 513 1748 l 5
+513 1748 m 5,0,-1
+ 718 1748 l 5,1,-1
+ 718 1543 l 5,2,-1
+ 513 1543 l 5,3,-1
+ 513 1748 l 5,0,-1
 EndSplineSet
 Refer: 50 79 N 1 0 0 1 0 0 2
 EndChar
@@ -60912,11 +60912,11 @@
 LayerCount: 2
 Fore
 SplineSet
-317 1840 m 5
- 915 1840 l 5
- 915 1692 l 5
- 317 1692 l 5
- 317 1840 l 5
+317 1840 m 5,0,-1
+ 915 1840 l 5,1,-1
+ 915 1692 l 5,2,-1
+ 317 1692 l 5,3,-1
+ 317 1840 l 5,0,-1
 EndSplineSet
 Refer: 60 89 N 1 0 0 1 0 0 2
 EndChar
@@ -60928,11 +60928,11 @@
 LayerCount: 2
 Fore
 SplineSet
-317 1526 m 5
- 915 1526 l 5
- 915 1378 l 5
- 317 1378 l 5
- 317 1526 l 5
+317 1526 m 5,0,-1
+ 915 1526 l 5,1,-1
+ 915 1378 l 5,2,-1
+ 317 1378 l 5,3,-1
+ 317 1526 l 5,0,-1
 EndSplineSet
 Refer: 92 121 N 1 0 0 1 0 0 2
 EndChar
@@ -62426,5 +62426,52 @@
  3176.65 270.26 3176.65 270.26 3103.39 270.26 c 2,50,-1
 EndSplineSet
 EndChar
+
+StartChar: circle
+Encoding: 9675 9675 1403
+Width: 1724
+VWidth: 2220
+Flags: W
+HStem: -184 55<672.735 1052.17> 1239 55<672.828 1052.27>
+VStem: 124 56<362.596 745.19> 1545 56<364.81 747.404>
+LayerCount: 2
+Fore
+SplineSet
+1601 555 m 0,0,1
+ 1601 406 1601 406 1542.5 269.5 c 128,-1,2
+ 1484 133 1484 133 1385.5 33.5 c 128,-1,3
+ 1287 -66 1287 -66 1149.5 -125 c 128,-1,4
+ 1012 -184 1012 -184 861 -184 c 0,5,6
+ 713 -184 713 -184 577 -126 c 128,-1,7
+ 441 -68 441 -68 341.5 30.5 c 128,-1,8
+ 242 129 242 129 183 266.5 c 128,-1,9
+ 124 404 124 404 124 555 c 0,10,11
+ 124 704 124 704 182.5 840.5 c 128,-1,12
+ 241 977 241 977 339.5 1076.5 c 128,-1,13
+ 438 1176 438 1176 575.5 1235 c 128,-1,14
+ 713 1294 713 1294 864 1294 c 0,15,16
+ 1012 1294 1012 1294 1148 1236 c 128,-1,17
+ 1284 1178 1284 1178 1383 1079.5 c 128,-1,18
+ 1482 981 1482 981 1541.5 843.5 c 128,-1,19
+ 1601 706 1601 706 1601 555 c 0,0,1
+864 -129 m 0,20,21
+ 1001 -129 1001 -129 1126.5 -75 c 128,-1,22
+ 1252 -21 1252 -21 1344 70.5 c 128,-1,23
+ 1436 162 1436 162 1490.5 288.5 c 128,-1,24
+ 1545 415 1545 415 1545 555 c 0,25,26
+ 1545 693 1545 693 1491 819.5 c 128,-1,27
+ 1437 946 1437 946 1346 1038 c 128,-1,28
+ 1255 1130 1255 1130 1128 1184.5 c 128,-1,29
+ 1001 1239 1001 1239 861 1239 c 0,30,31
+ 724 1239 724 1239 598.5 1185 c 128,-1,32
+ 473 1131 473 1131 381 1039.5 c 128,-1,33
+ 289 948 289 948 234.5 821.5 c 128,-1,34
+ 180 695 180 695 180 555 c 0,35,36
+ 180 417 180 417 234 290.5 c 128,-1,37
+ 288 164 288 164 379 72 c 128,-1,38
+ 470 -20 470 -20 597 -74.5 c 128,-1,39
+ 724 -129 724 -129 864 -129 c 0,20,21
+EndSplineSet
+EndChar
 EndChars
 EndSplineFont
--- a/lib/fonts/IsabelleTextBold.sfd	Mon Feb 29 11:42:15 2016 +0000
+++ b/lib/fonts/IsabelleTextBold.sfd	Mon Feb 29 15:13:11 2016 +0000
@@ -20,7 +20,7 @@
 OS2_WeightWidthSlopeOnly: 0
 OS2_UseTypoMetrics: 1
 CreationTime: 1050374980
-ModificationTime: 1451762294
+ModificationTime: 1456601640
 PfmFamily: 17
 TTFWeight: 700
 TTFWidth: 5
@@ -1678,10 +1678,10 @@
 DisplaySize: -96
 AntiAlias: 1
 FitToEm: 1
-WinInfo: 8589 21 15
+WinInfo: 9513 21 15
 BeginPrivate: 0
 EndPrivate
-BeginChars: 1114115 1395
+BeginChars: 1114115 1396
 
 StartChar: .notdef
 Encoding: 1114112 -1 0
@@ -68806,5 +68806,51 @@
  1527.71 468.866 1527.71 468.866 1456.29 435.035 c 2,67,-1
 EndSplineSet
 EndChar
+
+StartChar: circle
+Encoding: 9675 9675 1395
+Width: 1724
+Flags: W
+HStem: -235 157<631.134 1093.26> 1188 157<631.737 1093.87>
+VStem: 73 158<325.375 786.478> 1494 158<323.522 784.955>
+LayerCount: 2
+Fore
+SplineSet
+1589.5 250 m 128,-1,1
+ 1527 104 1527 104 1421.5 -2.5 c 128,-1,2
+ 1316 -109 1316 -109 1169 -172 c 128,-1,3
+ 1022 -235 1022 -235 861 -235 c 0,4,5
+ 703 -235 703 -235 557.5 -173 c 128,-1,6
+ 412 -111 412 -111 305.5 -5.5 c 128,-1,7
+ 199 100 199 100 136 247 c 128,-1,8
+ 73 394 73 394 73 555 c 0,9,10
+ 73 714 73 714 135.5 860 c 128,-1,11
+ 198 1006 198 1006 303.5 1112.5 c 128,-1,12
+ 409 1219 409 1219 556 1282 c 128,-1,13
+ 703 1345 703 1345 864 1345 c 0,14,15
+ 1022 1345 1022 1345 1167.5 1283 c 128,-1,16
+ 1313 1221 1313 1221 1419 1115.5 c 128,-1,17
+ 1525 1010 1525 1010 1588.5 863.5 c 128,-1,18
+ 1652 717 1652 717 1652 555 c 0,19,0
+ 1652 396 1652 396 1589.5 250 c 128,-1,1
+864 -78 m 0,20,21
+ 990 -78 990 -78 1106.5 -28 c 128,-1,22
+ 1223 22 1223 22 1308 106.5 c 128,-1,23
+ 1393 191 1393 191 1443.5 308.5 c 128,-1,24
+ 1494 426 1494 426 1494 555 c 0,25,26
+ 1494 683 1494 683 1444 800 c 128,-1,27
+ 1394 917 1394 917 1310 1002 c 128,-1,28
+ 1226 1087 1226 1087 1108.5 1137.5 c 128,-1,29
+ 991 1188 991 1188 861 1188 c 0,30,31
+ 735 1188 735 1188 618.5 1138 c 128,-1,32
+ 502 1088 502 1088 417 1003.5 c 128,-1,33
+ 332 919 332 919 281.5 801.5 c 128,-1,34
+ 231 684 231 684 231 555 c 0,35,36
+ 231 427 231 427 281 310 c 128,-1,37
+ 331 193 331 193 415 108 c 128,-1,38
+ 499 23 499 23 616.5 -27.5 c 128,-1,39
+ 734 -78 734 -78 864 -78 c 0,20,21
+EndSplineSet
+EndChar
 EndChars
 EndSplineFont
--- a/lib/scripts/run-polyml	Mon Feb 29 11:42:15 2016 +0000
+++ b/lib/scripts/run-polyml	Mon Feb 29 15:13:11 2016 +0000
@@ -1,8 +1,9 @@
 #!/usr/bin/env bash
+# :mode=shellscript:
 #
 # Author: Makarius
 #
-# Startup script for Poly/ML 5.1 ... 5.5.
+# Startup script for Poly/ML 5.6.
 
 export -n INFILE OUTFILE MLTEXT TERMINATE NOWRITE
 
@@ -39,12 +40,30 @@
 
 ## prepare databases
 
+case "$ML_PLATFORM" in
+  *-windows)
+    PLATFORM_INFILE="$(platform_path -m "$INFILE")"
+    PLATFORM_OUTFILE="$(platform_path -m "$OUTFILE")"
+    ;;
+  *)
+    PLATFORM_INFILE="$INFILE"
+    PLATFORM_OUTFILE="$OUTFILE"
+    ;;
+esac
+
 if [ -z "$INFILE" ]; then
   INIT=""
-  EXIT="fun exit rc = Posix.Process.exit (Word8.fromInt rc);"
+  case "$ML_PLATFORM" in
+    *-windows)
+      EXIT="fun exit 0 = OS.Process.exit OS.Process.success | exit 1 = OS.Process.exit OS.Process.failure | exit rc = OS.Process.exit (RunCall.unsafeCast (Word8.fromInt rc));"
+      ;;
+    *)
+      EXIT="fun exit rc = Posix.Process.exit (Word8.fromInt rc);"
+      ;;
+  esac
 else
   check_file "$INFILE"
-  INIT="(Signal.signal (2, Signal.SIG_HANDLE (fn _ => Process.interruptConsoleProcesses ())); PolyML.SaveState.loadState \"$INFILE\" handle exn => (TextIO.output (TextIO.stdErr, General.exnMessage exn ^ \": $INFILE\\n\"); Posix.Process.exit 0w1));"
+  INIT="(Signal.signal (2, Signal.SIG_HANDLE (fn _ => Thread.Thread.broadcastInterrupt ())); PolyML.SaveState.loadState \"$PLATFORM_INFILE\" handle exn => (TextIO.output (TextIO.stdErr, General.exnMessage exn ^ \": $INFILE\\n\"); OS.Process.exit OS.Process.success));"
   EXIT=""
 fi
 
@@ -52,7 +71,7 @@
   MLEXIT=""
 else
   if [ -z "$INFILE" ]; then
-    MLEXIT="(PolyML.shareCommonData PolyML.rootFunction; TextIO.output (TextIO.stdOut, \"Exporting $OUTFILE\n\"); PolyML.SaveState.saveState \"$OUTFILE\"; true) handle exn => (TextIO.output (TextIO.stdErr, General.exnMessage exn ^ \": $OUTFILE\\n\"); Posix.Process.exit 0w1);"
+    MLEXIT="(PolyML.shareCommonData PolyML.rootFunction; TextIO.output (TextIO.stdOut, \"Exporting $OUTFILE\n\"); PolyML.SaveState.saveState \"$PLATFORM_OUTFILE\"; true) handle exn => (TextIO.output (TextIO.stdErr, General.exnMessage exn ^ \": $OUTFILE\\n\"); OS.Process.exit OS.Process.success);"
   else
     MLEXIT="Session.save \"$OUTFILE\";"
   fi
@@ -64,16 +83,22 @@
 
 MLTEXT="$INIT $EXIT $MLTEXT"
 
-if [ -z "$TERMINATE" ]; then
-  FEEDER_OPTS=""
+if [ -n "$TERMINATE" -a -z "$MLEXIT" ]; then
+  "$POLY" -q -i $ML_OPTIONS --eval "$(perl "$ISABELLE_HOME/lib/scripts/recode.pl" "$MLTEXT")" \
+    --error-exit </dev/null
+  RC="$?"
 else
-  FEEDER_OPTS="-q"
+  if [ -z "$TERMINATE" ]; then
+    FEEDER_OPTS=""
+  else
+    FEEDER_OPTS="-q"
+    ML_OPTIONS="$ML_OPTIONS --error-exit"
+  fi
+  "$ISABELLE_HOME/lib/scripts/feeder" -p -h "$MLTEXT" -t "$MLEXIT" $FEEDER_OPTS | \
+    { read FPID; "$POLY" -q -i $ML_OPTIONS; RC="$?"; kill -TERM "$FPID"; exit "$RC"; }
+  RC="$?"
 fi
 
-"$ISABELLE_HOME/lib/scripts/feeder" -p -h "$MLTEXT" -t "$MLEXIT" $FEEDER_OPTS | \
-  { read FPID; "$POLY" -q $ML_OPTIONS; RC="$?"; kill -TERM "$FPID"; exit "$RC"; }
-RC="$?"
-
 [ -n "$OUTFILE" -a -f "$OUTFILE" -a -n "$NOWRITE" ] && chmod -w "$OUTFILE"
 
 exit "$RC"
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/lib/scripts/run-polyml-5.3.0	Mon Feb 29 15:13:11 2016 +0000
@@ -0,0 +1,81 @@
+#!/usr/bin/env bash
+#
+# Author: Makarius
+#
+# Startup script for Poly/ML 5.3.0.
+
+export -n INFILE OUTFILE MLTEXT TERMINATE NOWRITE
+
+
+## diagnostics
+
+function fail()
+{
+  echo "$1" >&2
+  exit 2
+}
+
+function fail_out()
+{
+  fail "Unable to create output heap file: \"$OUTFILE\""
+}
+
+function check_file()
+{
+  [ ! -f "$1" ] && fail "Unable to locate \"$1\""
+}
+
+
+## compiler executables and libraries
+
+[ -z "$ML_HOME" ] && fail "Missing ML installation (ML_HOME)"
+
+POLY="$ML_HOME/poly"
+check_file "$POLY"
+
+librarypath "$ML_HOME"
+
+
+
+## prepare databases
+
+if [ -z "$INFILE" ]; then
+  INIT=""
+  EXIT="fun exit rc = Posix.Process.exit (Word8.fromInt rc);"
+else
+  check_file "$INFILE"
+  INIT="(Signal.signal (2, Signal.SIG_HANDLE (fn _ => Process.interruptConsoleProcesses ())); PolyML.SaveState.loadState \"$INFILE\" handle exn => (TextIO.output (TextIO.stdErr, General.exnMessage exn ^ \": $INFILE\\n\"); Posix.Process.exit 0w1));"
+  EXIT=""
+fi
+
+if [ -z "$OUTFILE" ]; then
+  MLEXIT=""
+else
+  if [ -z "$INFILE" ]; then
+    MLEXIT="(PolyML.shareCommonData PolyML.rootFunction; TextIO.output (TextIO.stdOut, \"Exporting $OUTFILE\n\"); PolyML.SaveState.saveState \"$OUTFILE\"; true) handle exn => (TextIO.output (TextIO.stdErr, General.exnMessage exn ^ \": $OUTFILE\\n\"); Posix.Process.exit 0w1);"
+  else
+    MLEXIT="Session.save \"$OUTFILE\";"
+  fi
+  [ -f "$OUTFILE" ] && { chmod +w "$OUTFILE" || fail_out; }
+fi
+
+
+## run it!
+
+MLTEXT="$INIT $EXIT $MLTEXT"
+
+if [ -z "$TERMINATE" ]; then
+  FEEDER_OPTS=""
+else
+  FEEDER_OPTS="-q"
+fi
+
+"$ISABELLE_HOME/lib/scripts/feeder" -p -h "$MLTEXT" -t "$MLEXIT" $FEEDER_OPTS | \
+  { read FPID; "$POLY" -q $ML_OPTIONS; RC="$?"; kill -TERM "$FPID"; exit "$RC"; }
+RC="$?"
+
+[ -n "$OUTFILE" -a -f "$OUTFILE" -a -n "$NOWRITE" ] && chmod -w "$OUTFILE"
+
+exit "$RC"
+
+#:wrap=soft:maxLineLen=100:
--- a/lib/scripts/run-polyml-5.5.1	Mon Feb 29 11:42:15 2016 +0000
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,88 +0,0 @@
-#!/usr/bin/env bash
-# :mode=shellscript:
-#
-# Author: Makarius
-#
-# Startup script for Poly/ML 5.5.1.
-
-export -n INFILE OUTFILE MLTEXT TERMINATE NOWRITE
-
-
-## diagnostics
-
-function fail()
-{
-  echo "$1" >&2
-  exit 2
-}
-
-function fail_out()
-{
-  fail "Unable to create output heap file: \"$OUTFILE\""
-}
-
-function check_file()
-{
-  [ ! -f "$1" ] && fail "Unable to locate \"$1\""
-}
-
-
-## compiler executables and libraries
-
-[ -z "$ML_HOME" ] && fail "Missing ML installation (ML_HOME)"
-
-POLY="$ML_HOME/poly"
-check_file "$POLY"
-
-librarypath "$ML_HOME"
-
-
-
-## prepare databases
-
-if [ -z "$INFILE" ]; then
-  INIT=""
-  EXIT="fun exit rc = Posix.Process.exit (Word8.fromInt rc);"
-else
-  check_file "$INFILE"
-  INIT="(Signal.signal (2, Signal.SIG_HANDLE (fn _ => Process.interruptConsoleProcesses ())); PolyML.SaveState.loadState \"$INFILE\" handle exn => (TextIO.output (TextIO.stdErr, General.exnMessage exn ^ \": $INFILE\\n\"); Posix.Process.exit 0w1));"
-  EXIT=""
-fi
-
-if [ -z "$OUTFILE" ]; then
-  MLEXIT=""
-else
-  if [ -z "$INFILE" ]; then
-    MLEXIT="(PolyML.shareCommonData PolyML.rootFunction; TextIO.output (TextIO.stdOut, \"Exporting $OUTFILE\n\"); PolyML.SaveState.saveState \"$OUTFILE\"; true) handle exn => (TextIO.output (TextIO.stdErr, General.exnMessage exn ^ \": $OUTFILE\\n\"); Posix.Process.exit 0w1);"
-  else
-    MLEXIT="Session.save \"$OUTFILE\";"
-  fi
-  [ -f "$OUTFILE" ] && { chmod +w "$OUTFILE" || fail_out; }
-fi
-
-
-## run it!
-
-MLTEXT="$INIT $EXIT $MLTEXT"
-
-if [ -n "$TERMINATE" -a -z "$MLEXIT" ]; then
-  "$POLY" -q -i $ML_OPTIONS --eval "$(perl "$ISABELLE_HOME/lib/scripts/recode.pl" "$MLTEXT")" \
-    --error-exit </dev/null
-  RC="$?"
-else
-  if [ -z "$TERMINATE" ]; then
-    FEEDER_OPTS=""
-  else
-    FEEDER_OPTS="-q"
-    ML_OPTIONS="$ML_OPTIONS --error-exit"
-  fi
-  "$ISABELLE_HOME/lib/scripts/feeder" -p -h "$MLTEXT" -t "$MLEXIT" $FEEDER_OPTS | \
-    { read FPID; "$POLY" -q -i $ML_OPTIONS; RC="$?"; kill -TERM "$FPID"; exit "$RC"; }
-  RC="$?"
-fi
-
-[ -n "$OUTFILE" -a -f "$OUTFILE" -a -n "$NOWRITE" ] && chmod -w "$OUTFILE"
-
-exit "$RC"
-
-#:wrap=soft:maxLineLen=100:
--- a/lib/scripts/run-polyml-5.5.2	Mon Feb 29 11:42:15 2016 +0000
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,88 +0,0 @@
-#!/usr/bin/env bash
-# :mode=shellscript:
-#
-# Author: Makarius
-#
-# Startup script for Poly/ML 5.5.2.
-
-export -n INFILE OUTFILE MLTEXT TERMINATE NOWRITE
-
-
-## diagnostics
-
-function fail()
-{
-  echo "$1" >&2
-  exit 2
-}
-
-function fail_out()
-{
-  fail "Unable to create output heap file: \"$OUTFILE\""
-}
-
-function check_file()
-{
-  [ ! -f "$1" ] && fail "Unable to locate \"$1\""
-}
-
-
-## compiler executables and libraries
-
-[ -z "$ML_HOME" ] && fail "Missing ML installation (ML_HOME)"
-
-POLY="$ML_HOME/poly"
-check_file "$POLY"
-
-librarypath "$ML_HOME"
-
-
-
-## prepare databases
-
-if [ -z "$INFILE" ]; then
-  INIT=""
-  EXIT="fun exit rc = Posix.Process.exit (Word8.fromInt rc);"
-else
-  check_file "$INFILE"
-  INIT="(Signal.signal (2, Signal.SIG_HANDLE (fn _ => Process.interruptConsoleProcesses ())); PolyML.SaveState.loadState \"$INFILE\" handle exn => (TextIO.output (TextIO.stdErr, General.exnMessage exn ^ \": $INFILE\\n\"); Posix.Process.exit 0w1));"
-  EXIT=""
-fi
-
-if [ -z "$OUTFILE" ]; then
-  MLEXIT=""
-else
-  if [ -z "$INFILE" ]; then
-    MLEXIT="(PolyML.shareCommonData PolyML.rootFunction; TextIO.output (TextIO.stdOut, \"Exporting $OUTFILE\n\"); PolyML.SaveState.saveState \"$OUTFILE\"; true) handle exn => (TextIO.output (TextIO.stdErr, General.exnMessage exn ^ \": $OUTFILE\\n\"); Posix.Process.exit 0w1);"
-  else
-    MLEXIT="Session.save \"$OUTFILE\";"
-  fi
-  [ -f "$OUTFILE" ] && { chmod +w "$OUTFILE" || fail_out; }
-fi
-
-
-## run it!
-
-MLTEXT="$INIT $EXIT $MLTEXT"
-
-if [ -n "$TERMINATE" -a -z "$MLEXIT" ]; then
-  "$POLY" -q -i $ML_OPTIONS --eval "$(perl "$ISABELLE_HOME/lib/scripts/recode.pl" "$MLTEXT")" \
-    --error-exit </dev/null
-  RC="$?"
-else
-  if [ -z "$TERMINATE" ]; then
-    FEEDER_OPTS=""
-  else
-    FEEDER_OPTS="-q"
-    ML_OPTIONS="$ML_OPTIONS --error-exit"
-  fi
-  "$ISABELLE_HOME/lib/scripts/feeder" -p -h "$MLTEXT" -t "$MLEXIT" $FEEDER_OPTS | \
-    { read FPID; "$POLY" -q -i $ML_OPTIONS; RC="$?"; kill -TERM "$FPID"; exit "$RC"; }
-  RC="$?"
-fi
-
-[ -n "$OUTFILE" -a -f "$OUTFILE" -a -n "$NOWRITE" ] && chmod -w "$OUTFILE"
-
-exit "$RC"
-
-#:wrap=soft:maxLineLen=100:
--- a/lib/scripts/run-polyml-5.6	Mon Feb 29 11:42:15 2016 +0000
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,106 +0,0 @@
-#!/usr/bin/env bash
-# :mode=shellscript:
-#
-# Author: Makarius
-#
-# Startup script for Poly/ML 5.6.
-
-export -n INFILE OUTFILE MLTEXT TERMINATE NOWRITE
-
-
-## diagnostics
-
-function fail()
-{
-  echo "$1" >&2
-  exit 2
-}
-
-function fail_out()
-{
-  fail "Unable to create output heap file: \"$OUTFILE\""
-}
-
-function check_file()
-{
-  [ ! -f "$1" ] && fail "Unable to locate \"$1\""
-}
-
-
-## compiler executables and libraries
-
-[ -z "$ML_HOME" ] && fail "Missing ML installation (ML_HOME)"
-
-POLY="$ML_HOME/poly"
-check_file "$POLY"
-
-librarypath "$ML_HOME"
-
-
-
-## prepare databases
-
-case "$ML_PLATFORM" in
-  *-windows)
-    PLATFORM_INFILE="$(platform_path -m "$INFILE")"
-    PLATFORM_OUTFILE="$(platform_path -m "$OUTFILE")"
-    ;;
-  *)
-    PLATFORM_INFILE="$INFILE"
-    PLATFORM_OUTFILE="$OUTFILE"
-    ;;
-esac
-
-if [ -z "$INFILE" ]; then
-  INIT=""
-  case "$ML_PLATFORM" in
-    *-windows)
-      EXIT="fun exit 0 = OS.Process.exit OS.Process.success | exit 1 = OS.Process.exit OS.Process.failure | exit rc = OS.Process.exit (RunCall.unsafeCast (Word8.fromInt rc));"
-      ;;
-    *)
-      EXIT="fun exit rc = Posix.Process.exit (Word8.fromInt rc);"
-      ;;
-  esac
-else
-  check_file "$INFILE"
-  INIT="(Signal.signal (2, Signal.SIG_HANDLE (fn _ => Thread.Thread.broadcastInterrupt ())); PolyML.SaveState.loadState \"$PLATFORM_INFILE\" handle exn => (TextIO.output (TextIO.stdErr, General.exnMessage exn ^ \": $INFILE\\n\"); OS.Process.exit OS.Process.success));"
-  EXIT=""
-fi
-
-if [ -z "$OUTFILE" ]; then
-  MLEXIT=""
-else
-  if [ -z "$INFILE" ]; then
-    MLEXIT="(PolyML.shareCommonData PolyML.rootFunction; TextIO.output (TextIO.stdOut, \"Exporting $OUTFILE\n\"); PolyML.SaveState.saveState \"$PLATFORM_OUTFILE\"; true) handle exn => (TextIO.output (TextIO.stdErr, General.exnMessage exn ^ \": $OUTFILE\\n\"); OS.Process.exit OS.Process.success);"
-  else
-    MLEXIT="Session.save \"$OUTFILE\";"
-  fi
-  [ -f "$OUTFILE" ] && { chmod +w "$OUTFILE" || fail_out; }
-fi
-
-
-## run it!
-
-MLTEXT="$INIT $EXIT $MLTEXT"
-
-if [ -n "$TERMINATE" -a -z "$MLEXIT" ]; then
-  "$POLY" -q -i $ML_OPTIONS --eval "$(perl "$ISABELLE_HOME/lib/scripts/recode.pl" "$MLTEXT")" \
-    --error-exit </dev/null
-  RC="$?"
-else
-  if [ -z "$TERMINATE" ]; then
-    FEEDER_OPTS=""
-  else
-    FEEDER_OPTS="-q"
-    ML_OPTIONS="$ML_OPTIONS --error-exit"
-  fi
-  "$ISABELLE_HOME/lib/scripts/feeder" -p -h "$MLTEXT" -t "$MLEXIT" $FEEDER_OPTS | \
-    { read FPID; "$POLY" -q -i $ML_OPTIONS; RC="$?"; kill -TERM "$FPID"; exit "$RC"; }
-  RC="$?"
-fi
-
-[ -n "$OUTFILE" -a -f "$OUTFILE" -a -n "$NOWRITE" ] && chmod -w "$OUTFILE"
-
-exit "$RC"
-
-#:wrap=soft:maxLineLen=100:
--- a/lib/scripts/update_sub_sup	Mon Feb 29 11:42:15 2016 +0000
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,44 +0,0 @@
-#!/usr/bin/env perl
-#
-# Author: Makarius
-#
-# update_sub_sup - update Isabelle symbols involving sub/superscripts
-
-use warnings;
-use strict;
-
-sub update_sub_sup {
-    my ($file) = @_;
-
-    open (FILE, $file) || die $!;
-    undef $/; my $text = <FILE>; $/ = "\n";         # slurp whole file
-    close FILE || die $!;
-
-    $_ = $text;
-
-    s/\Q\<^isub>\E/\\<^sub>/g;
-    s/\Q\<^isup>\E/\\<^sup>/g;
-    s/\Q\<onesuperior>\E/\\<^sup>1/g;
-    s/\Q\<twosuperior>\E/\\<^sup>2/g;
-    s/\Q\<threesuperior>\E/\\<^sup>3/g;
-
-    my $result = $_;
-
-    if ($text ne $result) {
-        print STDERR "changing $file\n";
-        if (! -f "$file~~") {
-            rename $file, "$file~~" || die $!;
-        }
-        open (FILE, "> $file") || die $!;
-        print FILE $result;
-        close FILE || die $!;
-    }
-}
-
-
-## main
-
-foreach my $file (@ARGV) {
-  eval { &update_sub_sup($file); };
-  if ($@) { print STDERR "*** update_sub_sup $file: ", $@, "\n"; }
-}
--- a/lib/scripts/yxml	Mon Feb 29 11:42:15 2016 +0000
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,37 +0,0 @@
-#!/usr/bin/env perl
-#
-# Author: Makarius
-#
-# yxml.pl - simple XML to YXML converter
-#
-
-use warnings;
-use strict;
-
-use XML::Parser;
-
-binmode(STDOUT, ":utf8");
-
-sub handle_start {
-  print chr(5), chr(6), $_[1];
-  for (my $i = 2; $i <= $#_; $i++) {
-    print ($i % 2 == 0 ? chr(6) : "=");
-    print $_[$i];
-  }
-  print chr(5);
-}
-
-sub handle_end {
-  print chr(5), chr(6), chr(5);
-}
-
-sub handle_char {
-  print $_[1];
-}
-
-my $parser = new XML::Parser(Handlers =>
-  {Start => \&handle_start,
-    End => \&handle_end,
-    Char => \&handle_char});
-
-$parser->parse(*STDIN) or die $!;
--- a/lib/texinputs/isabellesym.sty	Mon Feb 29 11:42:15 2016 +0000
+++ b/lib/texinputs/isabellesym.sty	Mon Feb 29 15:13:11 2016 +0000
@@ -222,6 +222,7 @@
 \newcommand{\isasymexists}{\isamath{\exists\,}}
 \newcommand{\isasymnot}{\isamath{\neg}}
 \newcommand{\isasymnexists}{\isamath{\nexists\,}}  %requires amssymb
+\newcommand{\isasymcircle}{\isamath{\ocircle}}  %requires wasysym
 \newcommand{\isasymbox}{\isamath{\Box}}  %requires amssymb
 \newcommand{\isasymdiamond}{\isamath{\Diamond}}  %requires amssymb
 \newcommand{\isasymdiamondop}{\isamath{\diamond}}
--- a/src/Doc/System/Basics.thy	Mon Feb 29 11:42:15 2016 +0000
+++ b/src/Doc/System/Basics.thy	Mon Feb 29 15:13:11 2016 +0000
@@ -447,4 +447,41 @@
   @{verbatim [display] \<open>isabelle getenv ISABELLE_HOME_USER\<close>}
 \<close>
 
+
+section \<open>YXML versus XML\<close>
+
+text \<open>
+  Isabelle tools often use YXML, which is a simple and efficient syntax for
+  untyped XML trees. The YXML format is defined as follows.
+
+    \<^enum> The encoding is always UTF-8.
+
+    \<^enum> Body text is represented verbatim (no escaping, no special treatment of
+    white space, no named entities, no CDATA chunks, no comments).
+
+    \<^enum> Markup elements are represented via ASCII control characters \<open>\<^bold>X = 5\<close>
+    and \<open>\<^bold>Y = 6\<close> as follows:
+
+    \begin{tabular}{ll}
+      XML & YXML \\\hline
+      \<^verbatim>\<open><\<close>\<open>name attribute\<close>\<^verbatim>\<open>=\<close>\<open>value \<dots>\<close>\<^verbatim>\<open>>\<close> &
+      \<open>\<^bold>X\<^bold>Yname\<^bold>Yattribute\<close>\<^verbatim>\<open>=\<close>\<open>value\<dots>\<^bold>X\<close> \\
+      \<^verbatim>\<open></\<close>\<open>name\<close>\<^verbatim>\<open>>\<close> & \<open>\<^bold>X\<^bold>Y\<^bold>X\<close> \\
+    \end{tabular}
+
+    There is no special case for empty body text, i.e.\ \<^verbatim>\<open><foo/>\<close> is treated
+    like \<^verbatim>\<open><foo></foo>\<close>. Also note that \<open>\<^bold>X\<close> and \<open>\<^bold>Y\<close> may never occur in
+    well-formed XML documents.
+
+  Parsing YXML is pretty straight-forward: split the text into chunks
+  separated by \<open>\<^bold>X\<close>, then split each chunk into sub-chunks separated by \<open>\<^bold>Y\<close>.
+  Markup chunks start with an empty sub-chunk, and a second empty sub-chunk
+  indicates close of an element. Any other non-empty chunk consists of plain
+  text. For example, see @{file "~~/src/Pure/PIDE/yxml.ML"} or @{file
+  "~~/src/Pure/PIDE/yxml.scala"}.
+
+  YXML documents may be detected quickly by checking that the first two
+  characters are \<open>\<^bold>X\<^bold>Y\<close>.
+\<close>
+
 end
\ No newline at end of file
--- a/src/Doc/System/Misc.thy	Mon Feb 29 11:42:15 2016 +0000
+++ b/src/Doc/System/Misc.thy	Mon Feb 29 15:13:11 2016 +0000
@@ -265,42 +265,4 @@
   id of the @{setting ISABELLE_HOME} directory.
 \<close>
 
-
-section \<open>Convert XML to YXML\<close>
-
-text \<open>
-  The @{tool_def yxml} tool converts a standard XML document (stdin) to the
-  much simpler and more efficient YXML format of Isabelle (stdout). The YXML
-  format is defined as follows.
-
-    \<^enum> The encoding is always UTF-8.
-
-    \<^enum> Body text is represented verbatim (no escaping, no special treatment of
-    white space, no named entities, no CDATA chunks, no comments).
-
-    \<^enum> Markup elements are represented via ASCII control characters \<open>\<^bold>X = 5\<close>
-    and \<open>\<^bold>Y = 6\<close> as follows:
-
-    \begin{tabular}{ll}
-      XML & YXML \\\hline
-      \<^verbatim>\<open><\<close>\<open>name attribute\<close>\<^verbatim>\<open>=\<close>\<open>value \<dots>\<close>\<^verbatim>\<open>>\<close> &
-      \<open>\<^bold>X\<^bold>Yname\<^bold>Yattribute\<close>\<^verbatim>\<open>=\<close>\<open>value\<dots>\<^bold>X\<close> \\
-      \<^verbatim>\<open></\<close>\<open>name\<close>\<^verbatim>\<open>>\<close> & \<open>\<^bold>X\<^bold>Y\<^bold>X\<close> \\
-    \end{tabular}
-
-    There is no special case for empty body text, i.e.\ \<^verbatim>\<open><foo/>\<close> is treated
-    like \<^verbatim>\<open><foo></foo>\<close>. Also note that \<open>\<^bold>X\<close> and \<open>\<^bold>Y\<close> may never occur in
-    well-formed XML documents.
-
-  Parsing YXML is pretty straight-forward: split the text into chunks
-  separated by \<open>\<^bold>X\<close>, then split each chunk into sub-chunks separated by \<open>\<^bold>Y\<close>.
-  Markup chunks start with an empty sub-chunk, and a second empty sub-chunk
-  indicates close of an element. Any other non-empty chunk consists of plain
-  text. For example, see @{file "~~/src/Pure/PIDE/yxml.ML"} or @{file
-  "~~/src/Pure/PIDE/yxml.scala"}.
-
-  YXML documents may be detected quickly by checking that the first two
-  characters are \<open>\<^bold>X\<^bold>Y\<close>.
-\<close>
-
 end
\ No newline at end of file
--- a/src/HOL/Algebra/Divisibility.thy	Mon Feb 29 11:42:15 2016 +0000
+++ b/src/HOL/Algebra/Divisibility.thy	Mon Feb 29 15:13:11 2016 +0000
@@ -2169,9 +2169,8 @@
   have "\<exists>c cs. c \<in> carrier G \<and> set cs \<subseteq> carrier G \<and> wfactors G cs c \<and> fmset G cs = fmset G bs - fmset G as"
   proof (intro mset_wfactorsEx, simp)
     fix X
-    assume "count (fmset G as) X < count (fmset G bs) X"
-    hence "0 < count (fmset G bs) X" by simp
-    hence "X \<in> set_mset (fmset G bs)" by simp
+    assume "X \<in># fmset G bs - fmset G as"
+    hence "X \<in># fmset G bs" by (rule in_diffD)
     hence "X \<in> set (map (assocs G) bs)" by (simp add: fmset_def)
     hence "\<exists>x. x \<in> set bs \<and> X = assocs G x" by (induct bs) auto
     from this obtain x
@@ -2595,8 +2594,8 @@
                fmset G cs = fmset G as #\<inter> fmset G bs"
   proof (intro mset_wfactorsEx)
     fix X
-    assume "X \<in> set_mset (fmset G as #\<inter> fmset G bs)"
-    hence "X \<in> set_mset (fmset G as)" by (simp add: multiset_inter_def)
+    assume "X \<in># fmset G as #\<inter> fmset G bs"
+    hence "X \<in># fmset G as" by simp
     hence "X \<in> set (map (assocs G) as)" by (simp add: fmset_def)
     hence "\<exists>x. X = assocs G x \<and> x \<in> set as" by (induct as) auto
     from this obtain x
@@ -2673,9 +2672,9 @@
                fmset G cs = (fmset G as - fmset G bs) + fmset G bs"
   proof (intro mset_wfactorsEx)
     fix X
-    assume "X \<in> set_mset ((fmset G as - fmset G bs) + fmset G bs)"
-    hence "X \<in> set_mset (fmset G as) \<or> X \<in> set_mset (fmset G bs)"
-       by (cases "X :# fmset G bs", simp, simp)
+    assume "X \<in># (fmset G as - fmset G bs) + fmset G bs"
+    hence "X \<in># fmset G as \<or> X \<in># fmset G bs"
+      by (auto dest: in_diffD)
     moreover
     {
       assume "X \<in> set_mset (fmset G as)"
--- a/src/HOL/Codegenerator_Test/Generate_Efficient_Datastructures.thy	Mon Feb 29 11:42:15 2016 +0000
+++ b/src/HOL/Codegenerator_Test/Generate_Efficient_Datastructures.thy	Mon Feb 29 15:13:11 2016 +0000
@@ -60,7 +60,19 @@
 
 lemma [code, code del]:
   "(Lcm :: int set \<Rightarrow> int) = Lcm" ..
-  
+
+lemma [code, code del]:
+  "(Gcd :: _ poly set \<Rightarrow> _) = Gcd" ..
+
+lemma [code, code del]:
+  "(Lcm :: _ poly set \<Rightarrow> _) = Lcm" ..
+
+lemma [code, code del]:
+  "Gcd_eucl = Gcd_eucl" ..
+
+lemma [code, code del]:
+  "Lcm_eucl = Lcm_eucl" ..
+
 (*
   If the code generation ends with an exception with the following message:
   '"List.set" is not a constructor, on left hand side of equation: ...',
--- a/src/HOL/GCD.thy	Mon Feb 29 11:42:15 2016 +0000
+++ b/src/HOL/GCD.thy	Mon Feb 29 15:13:11 2016 +0000
@@ -395,10 +395,549 @@
 lemma mult_lcm_right:
   "lcm a b * c = lcm (a * c) (b * c) * unit_factor c"
   using mult_lcm_left [of c a b] by (simp add: ac_simps)
+
+lemma gcdI:
+  assumes "c dvd a" and "c dvd b" and greatest: "\<And>d. d dvd a \<Longrightarrow> d dvd b \<Longrightarrow> d dvd c"
+    and "normalize c = c"
+  shows "c = gcd a b"
+  by (rule associated_eqI) (auto simp: assms intro: gcd_greatest)
+
+lemma gcd_unique: "d dvd a \<and> d dvd b \<and> 
+    normalize d = d \<and>
+    (\<forall>e. e dvd a \<and> e dvd b \<longrightarrow> e dvd d) \<longleftrightarrow> d = gcd a b"
+  by rule (auto intro: gcdI simp: gcd_greatest)
+
+lemma gcd_dvd_prod: "gcd a b dvd k * b"
+  using mult_dvd_mono [of 1] by auto
+
+lemma gcd_proj2_if_dvd: "b dvd a \<Longrightarrow> gcd a b = normalize b"
+  by (rule gcdI [symmetric]) simp_all
+
+lemma gcd_proj1_if_dvd: "a dvd b \<Longrightarrow> gcd a b = normalize a"
+  by (rule gcdI [symmetric]) simp_all
+
+lemma gcd_proj1_iff: "gcd m n = normalize m \<longleftrightarrow> m dvd n"
+proof
+  assume A: "gcd m n = normalize m"
+  show "m dvd n"
+  proof (cases "m = 0")
+    assume [simp]: "m \<noteq> 0"
+    from A have B: "m = gcd m n * unit_factor m"
+      by (simp add: unit_eq_div2)
+    show ?thesis by (subst B, simp add: mult_unit_dvd_iff)
+  qed (insert A, simp)
+next
+  assume "m dvd n"
+  then show "gcd m n = normalize m" by (rule gcd_proj1_if_dvd)
+qed
   
+lemma gcd_proj2_iff: "gcd m n = normalize n \<longleftrightarrow> n dvd m"
+  using gcd_proj1_iff [of n m] by (simp add: ac_simps)
+
+lemma gcd_mult_distrib': "normalize c * gcd a b = gcd (c * a) (c * b)"
+  by (rule gcdI) (auto simp: normalize_mult gcd_greatest mult_dvd_mono gcd_mult_left[symmetric])
+
+lemma gcd_mult_distrib:
+  "k * gcd a b = gcd (k * a) (k * b) * unit_factor k"
+proof-
+  have "normalize k * gcd a b = gcd (k * a) (k * b)"
+    by (simp add: gcd_mult_distrib')
+  then have "normalize k * gcd a b * unit_factor k = gcd (k * a) (k * b) * unit_factor k"
+    by simp
+  then have "normalize k * unit_factor k * gcd a b  = gcd (k * a) (k * b) * unit_factor k"
+    by (simp only: ac_simps)
+  then show ?thesis
+    by simp
+qed
+
+lemma lcm_mult_unit1:
+  "is_unit a \<Longrightarrow> lcm (b * a) c = lcm b c"
+  by (rule associated_eqI) (simp_all add: mult_unit_dvd_iff dvd_lcmI1)
+
+lemma lcm_mult_unit2:
+  "is_unit a \<Longrightarrow> lcm b (c * a) = lcm b c"
+  using lcm_mult_unit1 [of a c b] by (simp add: ac_simps)
+
+lemma lcm_div_unit1:
+  "is_unit a \<Longrightarrow> lcm (b div a) c = lcm b c"
+  by (erule is_unitE [of _ b]) (simp add: lcm_mult_unit1) 
+
+lemma lcm_div_unit2:
+  "is_unit a \<Longrightarrow> lcm b (c div a) = lcm b c"
+  by (erule is_unitE [of _ c]) (simp add: lcm_mult_unit2)
+
+lemma normalize_lcm_left [simp]:
+  "lcm (normalize a) b = lcm a b"
+proof (cases "a = 0")
+  case True then show ?thesis
+    by simp
+next
+  case False then have "is_unit (unit_factor a)"
+    by simp
+  moreover have "normalize a = a div unit_factor a"
+    by simp
+  ultimately show ?thesis
+    by (simp only: lcm_div_unit1)
+qed
+
+lemma normalize_lcm_right [simp]:
+  "lcm a (normalize b) = lcm a b"
+  using normalize_lcm_left [of b a] by (simp add: ac_simps)
+
+lemma gcd_mult_unit1: "is_unit a \<Longrightarrow> gcd (b * a) c = gcd b c"
+  apply (rule gcdI)
+  apply simp_all
+  apply (rule dvd_trans, rule gcd_dvd1, simp add: unit_simps)
+  done
+
+lemma gcd_mult_unit2: "is_unit a \<Longrightarrow> gcd b (c * a) = gcd b c"
+  by (subst gcd.commute, subst gcd_mult_unit1, assumption, rule gcd.commute)
+
+lemma gcd_div_unit1: "is_unit a \<Longrightarrow> gcd (b div a) c = gcd b c"
+  by (erule is_unitE [of _ b]) (simp add: gcd_mult_unit1)
+
+lemma gcd_div_unit2: "is_unit a \<Longrightarrow> gcd b (c div a) = gcd b c"
+  by (erule is_unitE [of _ c]) (simp add: gcd_mult_unit2)
+
+lemma normalize_gcd_left [simp]:
+  "gcd (normalize a) b = gcd a b"
+proof (cases "a = 0")
+  case True then show ?thesis
+    by simp
+next
+  case False then have "is_unit (unit_factor a)"
+    by simp
+  moreover have "normalize a = a div unit_factor a"
+    by simp
+  ultimately show ?thesis
+    by (simp only: gcd_div_unit1)
+qed
+
+lemma normalize_gcd_right [simp]:
+  "gcd a (normalize b) = gcd a b"
+  using normalize_gcd_left [of b a] by (simp add: ac_simps)
+
+lemma comp_fun_idem_gcd: "comp_fun_idem gcd"
+  by standard (simp_all add: fun_eq_iff ac_simps)
+
+lemma comp_fun_idem_lcm: "comp_fun_idem lcm"
+  by standard (simp_all add: fun_eq_iff ac_simps)
+
+lemma gcd_dvd_antisym:
+  "gcd a b dvd gcd c d \<Longrightarrow> gcd c d dvd gcd a b \<Longrightarrow> gcd a b = gcd c d"
+proof (rule gcdI)
+  assume A: "gcd a b dvd gcd c d" and B: "gcd c d dvd gcd a b"
+  have "gcd c d dvd c" by simp
+  with A show "gcd a b dvd c" by (rule dvd_trans)
+  have "gcd c d dvd d" by simp
+  with A show "gcd a b dvd d" by (rule dvd_trans)
+  show "normalize (gcd a b) = gcd a b"
+    by simp
+  fix l assume "l dvd c" and "l dvd d"
+  hence "l dvd gcd c d" by (rule gcd_greatest)
+  from this and B show "l dvd gcd a b" by (rule dvd_trans)
+qed
+
+lemma coprime_dvd_mult:
+  assumes "coprime a b" and "a dvd c * b"
+  shows "a dvd c"
+proof (cases "c = 0")
+  case True then show ?thesis by simp
+next
+  case False
+  then have unit: "is_unit (unit_factor c)" by simp
+  from \<open>coprime a b\<close> mult_gcd_left [of c a b]
+  have "gcd (c * a) (c * b) * unit_factor c = c"
+    by (simp add: ac_simps)
+  moreover from \<open>a dvd c * b\<close> have "a dvd gcd (c * a) (c * b) * unit_factor c"
+    by (simp add: dvd_mult_unit_iff unit)
+  ultimately show ?thesis by simp
+qed
+
+lemma coprime_dvd_mult_iff:
+  assumes "coprime a c"
+  shows "a dvd b * c \<longleftrightarrow> a dvd b"
+  using assms by (auto intro: coprime_dvd_mult)
+
+lemma gcd_mult_cancel:
+  "coprime c b \<Longrightarrow> gcd (c * a) b = gcd a b"
+  apply (rule associated_eqI)
+  apply (rule gcd_greatest)
+  apply (rule_tac b = c in coprime_dvd_mult)
+  apply (simp add: gcd.assoc)
+  apply (simp_all add: ac_simps)
+  done
+
+lemma coprime_crossproduct:
+  fixes a b c d
+  assumes "coprime a d" and "coprime b c"
+  shows "normalize a * normalize c = normalize b * normalize d
+    \<longleftrightarrow> normalize a = normalize b \<and> normalize c = normalize d" (is "?lhs \<longleftrightarrow> ?rhs")
+proof
+  assume ?rhs then show ?lhs by simp
+next
+  assume ?lhs
+  from \<open>?lhs\<close> have "normalize a dvd normalize b * normalize d"
+    by (auto intro: dvdI dest: sym)
+  with \<open>coprime a d\<close> have "a dvd b"
+    by (simp add: coprime_dvd_mult_iff normalize_mult [symmetric])
+  from \<open>?lhs\<close> have "normalize b dvd normalize a * normalize c"
+    by (auto intro: dvdI dest: sym)
+  with \<open>coprime b c\<close> have "b dvd a"
+    by (simp add: coprime_dvd_mult_iff normalize_mult [symmetric])
+  from \<open>?lhs\<close> have "normalize c dvd normalize d * normalize b"
+    by (auto intro: dvdI dest: sym simp add: mult.commute)
+  with \<open>coprime b c\<close> have "c dvd d"
+    by (simp add: coprime_dvd_mult_iff gcd.commute normalize_mult [symmetric])
+  from \<open>?lhs\<close> have "normalize d dvd normalize c * normalize a"
+    by (auto intro: dvdI dest: sym simp add: mult.commute)
+  with \<open>coprime a d\<close> have "d dvd c"
+    by (simp add: coprime_dvd_mult_iff gcd.commute normalize_mult [symmetric])
+  from \<open>a dvd b\<close> \<open>b dvd a\<close> have "normalize a = normalize b"
+    by (rule associatedI)
+  moreover from \<open>c dvd d\<close> \<open>d dvd c\<close> have "normalize c = normalize d"
+    by (rule associatedI)
+  ultimately show ?rhs ..
+qed
+
+lemma gcd_add1 [simp]: "gcd (m + n) n = gcd m n"
+  by (rule gcdI [symmetric]) (simp_all add: dvd_add_left_iff)
+
+lemma gcd_add2 [simp]: "gcd m (m + n) = gcd m n"
+  using gcd_add1 [of n m] by (simp add: ac_simps)
+
+lemma gcd_add_mult: "gcd m (k * m + n) = gcd m n"
+  by (rule gcdI [symmetric]) (simp_all add: dvd_add_right_iff)
+
+lemma coprimeI: "(\<And>l. \<lbrakk>l dvd a; l dvd b\<rbrakk> \<Longrightarrow> l dvd 1) \<Longrightarrow> gcd a b = 1"
+  by (rule sym, rule gcdI, simp_all)
+
+lemma coprime: "gcd a b = 1 \<longleftrightarrow> (\<forall>d. d dvd a \<and> d dvd b \<longleftrightarrow> is_unit d)"
+  by (auto intro: coprimeI gcd_greatest dvd_gcdD1 dvd_gcdD2)
+
+lemma div_gcd_coprime:
+  assumes nz: "a \<noteq> 0 \<or> b \<noteq> 0"
+  shows "coprime (a div gcd a b) (b div gcd a b)"
+proof -
+  let ?g = "gcd a b"
+  let ?a' = "a div ?g"
+  let ?b' = "b div ?g"
+  let ?g' = "gcd ?a' ?b'"
+  have dvdg: "?g dvd a" "?g dvd b" by simp_all
+  have dvdg': "?g' dvd ?a'" "?g' dvd ?b'" by simp_all
+  from dvdg dvdg' obtain ka kb ka' kb' where
+      kab: "a = ?g * ka" "b = ?g * kb" "?a' = ?g' * ka'" "?b' = ?g' * kb'"
+    unfolding dvd_def by blast
+  from this [symmetric] have "?g * ?a' = (?g * ?g') * ka'" "?g * ?b' = (?g * ?g') * kb'"
+    by (simp_all add: mult.assoc mult.left_commute [of "gcd a b"])
+  then have dvdgg':"?g * ?g' dvd a" "?g* ?g' dvd b"
+    by (auto simp add: dvd_mult_div_cancel [OF dvdg(1)]
+      dvd_mult_div_cancel [OF dvdg(2)] dvd_def)
+  have "?g \<noteq> 0" using nz by simp
+  moreover from gcd_greatest [OF dvdgg'] have "?g * ?g' dvd ?g" .
+  thm dvd_mult_cancel_left
+  ultimately show ?thesis using dvd_times_left_cancel_iff [of "gcd a b" _ 1] by simp
+qed
+
+
+lemma divides_mult:
+  assumes "a dvd c" and nr: "b dvd c" and "coprime a b"
+  shows "a * b dvd c"
+proof-
+  from \<open>b dvd c\<close> obtain b' where"c = b * b'" ..
+  with \<open>a dvd c\<close> have "a dvd b' * b"
+    by (simp add: ac_simps)
+  with \<open>coprime a b\<close> have "a dvd b'"
+    by (simp add: coprime_dvd_mult_iff)
+  then obtain a' where "b' = a * a'" ..
+  with \<open>c = b * b'\<close> have "c = (a * b) * a'"
+    by (simp add: ac_simps)
+  then show ?thesis ..
+qed
+
+lemma coprime_lmult:
+  assumes dab: "gcd d (a * b) = 1" 
+  shows "gcd d a = 1"
+proof (rule coprimeI)
+  fix l assume "l dvd d" and "l dvd a"
+  hence "l dvd a * b" by simp
+  with \<open>l dvd d\<close> and dab show "l dvd 1" by (auto intro: gcd_greatest)
+qed
+
+lemma coprime_rmult:
+  assumes dab: "gcd d (a * b) = 1"
+  shows "gcd d b = 1"
+proof (rule coprimeI)
+  fix l assume "l dvd d" and "l dvd b"
+  hence "l dvd a * b" by simp
+  with \<open>l dvd d\<close> and dab show "l dvd 1" by (auto intro: gcd_greatest)
+qed
+
+lemma coprime_mult:
+  assumes da: "coprime d a" and db: "coprime d b"
+  shows "coprime d (a * b)"
+  apply (subst gcd.commute)
+  using da apply (subst gcd_mult_cancel)
+  apply (subst gcd.commute, assumption)
+  apply (subst gcd.commute, rule db)
+  done
+
+lemma coprime_mul_eq: "gcd d (a * b) = 1 \<longleftrightarrow> gcd d a = 1 \<and> gcd d b = 1"
+  using coprime_rmult[of d a b] coprime_lmult[of d a b] coprime_mult[of d a b] by blast
+
+lemma gcd_coprime:
+  assumes c: "gcd a b \<noteq> 0" and a: "a = a' * gcd a b" and b: "b = b' * gcd a b"
+  shows "gcd a' b' = 1"
+proof -
+  from c have "a \<noteq> 0 \<or> b \<noteq> 0" by simp
+  with div_gcd_coprime have "gcd (a div gcd a b) (b div gcd a b) = 1" .
+  also from assms have "a div gcd a b = a'" using dvd_div_eq_mult local.gcd_dvd1 by blast
+  also from assms have "b div gcd a b = b'" using dvd_div_eq_mult local.gcd_dvd1 by blast
+  finally show ?thesis .
+qed
+
+lemma coprime_power:
+  assumes "0 < n"
+  shows "gcd a (b ^ n) = 1 \<longleftrightarrow> gcd a b = 1"
+using assms proof (induct n)
+  case (Suc n) then show ?case
+    by (cases n) (simp_all add: coprime_mul_eq)
+qed simp
+
+lemma gcd_coprime_exists:
+  assumes nz: "gcd a b \<noteq> 0"
+  shows "\<exists>a' b'. a = a' * gcd a b \<and> b = b' * gcd a b \<and> gcd a' b' = 1"
+  apply (rule_tac x = "a div gcd a b" in exI)
+  apply (rule_tac x = "b div gcd a b" in exI)
+  apply (insert nz, auto intro: div_gcd_coprime)
+  done
+
+lemma coprime_exp:
+  "gcd d a = 1 \<Longrightarrow> gcd d (a^n) = 1"
+  by (induct n, simp_all add: coprime_mult)
+
+lemma coprime_exp_left:
+  assumes "coprime a b"
+  shows "coprime (a ^ n) b"
+  using assms by (induct n) (simp_all add: gcd_mult_cancel)
+
+lemma coprime_exp2:
+  assumes "coprime a b"
+  shows "coprime (a ^ n) (b ^ m)"
+proof (rule coprime_exp_left)
+  from assms show "coprime a (b ^ m)"
+    by (induct m) (simp_all add: gcd_mult_cancel gcd.commute [of a])
+qed
+
+lemma gcd_exp:
+  "gcd (a ^ n) (b ^ n) = gcd a b ^ n"
+proof (cases "a = 0 \<and> b = 0")
+  case True
+  then show ?thesis by (cases n) simp_all
+next
+  case False
+  then have "1 = gcd ((a div gcd a b) ^ n) ((b div gcd a b) ^ n)"
+    using coprime_exp2[OF div_gcd_coprime[of a b], of n n, symmetric] by simp
+  then have "gcd a b ^ n = gcd a b ^ n * ..." by simp
+  also note gcd_mult_distrib
+  also have "unit_factor (gcd a b ^ n) = 1"
+    using False by (auto simp add: unit_factor_power unit_factor_gcd)
+  also have "(gcd a b)^n * (a div gcd a b)^n = a^n"
+    by (subst ac_simps, subst div_power, simp, rule dvd_div_mult_self, rule dvd_power_same, simp)
+  also have "(gcd a b)^n * (b div gcd a b)^n = b^n"
+    by (subst ac_simps, subst div_power, simp, rule dvd_div_mult_self, rule dvd_power_same, simp)
+  finally show ?thesis by simp
+qed
+
+lemma coprime_common_divisor: 
+  "gcd a b = 1 \<Longrightarrow> a dvd a \<Longrightarrow> a dvd b \<Longrightarrow> is_unit a"
+  apply (subgoal_tac "a dvd gcd a b")
+  apply simp
+  apply (erule (1) gcd_greatest)
+  done
+
+lemma division_decomp: 
+  assumes dc: "a dvd b * c"
+  shows "\<exists>b' c'. a = b' * c' \<and> b' dvd b \<and> c' dvd c"
+proof (cases "gcd a b = 0")
+  assume "gcd a b = 0"
+  hence "a = 0 \<and> b = 0" by simp
+  hence "a = 0 * c \<and> 0 dvd b \<and> c dvd c" by simp
+  then show ?thesis by blast
+next
+  let ?d = "gcd a b"
+  assume "?d \<noteq> 0"
+  from gcd_coprime_exists[OF this]
+    obtain a' b' where ab': "a = a' * ?d" "b = b' * ?d" "gcd a' b' = 1"
+    by blast
+  from ab'(1) have "a' dvd a" unfolding dvd_def by blast
+  with dc have "a' dvd b*c" using dvd_trans[of a' a "b*c"] by simp
+  from dc ab'(1,2) have "a'*?d dvd (b'*?d) * c" by simp
+  hence "?d * a' dvd ?d * (b' * c)" by (simp add: mult_ac)
+  with \<open>?d \<noteq> 0\<close> have "a' dvd b' * c" by simp
+  with coprime_dvd_mult[OF ab'(3)] 
+    have "a' dvd c" by (subst (asm) ac_simps, blast)
+  with ab'(1) have "a = ?d * a' \<and> ?d dvd b \<and> a' dvd c" by (simp add: mult_ac)
+  then show ?thesis by blast
+qed
+
+lemma pow_divs_pow:
+  assumes ab: "a ^ n dvd b ^ n" and n: "n \<noteq> 0"
+  shows "a dvd b"
+proof (cases "gcd a b = 0")
+  assume "gcd a b = 0"
+  then show ?thesis by simp
+next
+  let ?d = "gcd a b"
+  assume "?d \<noteq> 0"
+  from n obtain m where m: "n = Suc m" by (cases n, simp_all)
+  from \<open>?d \<noteq> 0\<close> have zn: "?d ^ n \<noteq> 0" by (rule power_not_zero)
+  from gcd_coprime_exists[OF \<open>?d \<noteq> 0\<close>]
+    obtain a' b' where ab': "a = a' * ?d" "b = b' * ?d" "gcd a' b' = 1"
+    by blast
+  from ab have "(a' * ?d) ^ n dvd (b' * ?d) ^ n"
+    by (simp add: ab'(1,2)[symmetric])
+  hence "?d^n * a'^n dvd ?d^n * b'^n"
+    by (simp only: power_mult_distrib ac_simps)
+  with zn have "a'^n dvd b'^n" by simp
+  hence "a' dvd b'^n" using dvd_trans[of a' "a'^n" "b'^n"] by (simp add: m)
+  hence "a' dvd b'^m * b'" by (simp add: m ac_simps)
+  with coprime_dvd_mult[OF coprime_exp[OF ab'(3), of m]]
+    have "a' dvd b'" by (subst (asm) ac_simps, blast)
+  hence "a'*?d dvd b'*?d" by (rule mult_dvd_mono, simp)
+  with ab'(1,2) show ?thesis by simp
+qed
+
+lemma pow_divs_eq [simp]:
+  "n \<noteq> 0 \<Longrightarrow> a ^ n dvd b ^ n \<longleftrightarrow> a dvd b"
+  by (auto intro: pow_divs_pow dvd_power_same)
+
+lemma coprime_plus_one [simp]: "gcd (n + 1) n = 1"
+  by (subst add_commute, simp)
+
+lemma setprod_coprime [rule_format]:
+  "(\<forall>i\<in>A. gcd (f i) a = 1) \<longrightarrow> gcd (\<Prod>i\<in>A. f i) a = 1"
+  apply (cases "finite A")
+  apply (induct set: finite)
+  apply (auto simp add: gcd_mult_cancel)
+  done
+  
+lemma listprod_coprime:
+  "(\<And>x. x \<in> set xs \<Longrightarrow> coprime x y) \<Longrightarrow> coprime (listprod xs) y" 
+  by (induction xs) (simp_all add: gcd_mult_cancel)
+
+lemma coprime_divisors: 
+  assumes "d dvd a" "e dvd b" "gcd a b = 1"
+  shows "gcd d e = 1" 
+proof -
+  from assms obtain k l where "a = d * k" "b = e * l"
+    unfolding dvd_def by blast
+  with assms have "gcd (d * k) (e * l) = 1" by simp
+  hence "gcd (d * k) e = 1" by (rule coprime_lmult)
+  also have "gcd (d * k) e = gcd e (d * k)" by (simp add: ac_simps)
+  finally have "gcd e d = 1" by (rule coprime_lmult)
+  then show ?thesis by (simp add: ac_simps)
+qed
+
+lemma lcm_gcd_prod:
+  "lcm a b * gcd a b = normalize (a * b)"
+  by (simp add: lcm_gcd)
+
+declare unit_factor_lcm [simp]
+
+lemma lcmI:
+  assumes "a dvd c" and "b dvd c" and "\<And>d. a dvd d \<Longrightarrow> b dvd d \<Longrightarrow> c dvd d"
+    and "normalize c = c"
+  shows "c = lcm a b"
+  by (rule associated_eqI) (auto simp: assms intro: lcm_least)
+
+lemma gcd_dvd_lcm [simp]:
+  "gcd a b dvd lcm a b"
+  using gcd_dvd2 by (rule dvd_lcmI2)
+
+lemmas lcm_0 = lcm_0_right
+
+lemma lcm_unique:
+  "a dvd d \<and> b dvd d \<and> 
+  normalize d = d \<and>
+  (\<forall>e. a dvd e \<and> b dvd e \<longrightarrow> d dvd e) \<longleftrightarrow> d = lcm a b"
+  by rule (auto intro: lcmI simp: lcm_least lcm_eq_0_iff)
+
+lemma lcm_coprime:
+  "gcd a b = 1 \<Longrightarrow> lcm a b = normalize (a * b)"
+  by (subst lcm_gcd) simp
+
+lemma lcm_proj1_if_dvd: 
+  "b dvd a \<Longrightarrow> lcm a b = normalize a"
+  by (cases "a = 0") (simp, rule sym, rule lcmI, simp_all)
+
+lemma lcm_proj2_if_dvd: 
+  "a dvd b \<Longrightarrow> lcm a b = normalize b"
+  using lcm_proj1_if_dvd [of a b] by (simp add: ac_simps)
+
+lemma lcm_proj1_iff:
+  "lcm m n = normalize m \<longleftrightarrow> n dvd m"
+proof
+  assume A: "lcm m n = normalize m"
+  show "n dvd m"
+  proof (cases "m = 0")
+    assume [simp]: "m \<noteq> 0"
+    from A have B: "m = lcm m n * unit_factor m"
+      by (simp add: unit_eq_div2)
+    show ?thesis by (subst B, simp)
+  qed simp
+next
+  assume "n dvd m"
+  then show "lcm m n = normalize m" by (rule lcm_proj1_if_dvd)
+qed
+
+lemma lcm_proj2_iff:
+  "lcm m n = normalize n \<longleftrightarrow> m dvd n"
+  using lcm_proj1_iff [of n m] by (simp add: ac_simps)
+
 end
 
 class ring_gcd = comm_ring_1 + semiring_gcd
+begin
+
+lemma coprime_minus_one: "coprime (n - 1) n"
+  using coprime_plus_one[of "n - 1"] by (simp add: gcd.commute)
+
+lemma gcd_neg1 [simp]:
+  "gcd (-a) b = gcd a b"
+  by (rule sym, rule gcdI, simp_all add: gcd_greatest)
+
+lemma gcd_neg2 [simp]:
+  "gcd a (-b) = gcd a b"
+  by (rule sym, rule gcdI, simp_all add: gcd_greatest)
+
+lemma gcd_neg_numeral_1 [simp]:
+  "gcd (- numeral n) a = gcd (numeral n) a"
+  by (fact gcd_neg1)
+
+lemma gcd_neg_numeral_2 [simp]:
+  "gcd a (- numeral n) = gcd a (numeral n)"
+  by (fact gcd_neg2)
+
+lemma gcd_diff1: "gcd (m - n) n = gcd m n"
+  by (subst diff_conv_add_uminus, subst gcd_neg2[symmetric],  subst gcd_add1, simp)
+
+lemma gcd_diff2: "gcd (n - m) n = gcd m n"
+  by (subst gcd_neg1[symmetric], simp only: minus_diff_eq gcd_diff1)
+
+lemma lcm_neg1 [simp]: "lcm (-a) b = lcm a b"
+  by (rule sym, rule lcmI, simp_all add: lcm_least lcm_eq_0_iff)
+
+lemma lcm_neg2 [simp]: "lcm a (-b) = lcm a b"
+  by (rule sym, rule lcmI, simp_all add: lcm_least lcm_eq_0_iff)
+
+lemma lcm_neg_numeral_1 [simp]: "lcm (- numeral n) a = lcm (numeral n) a"
+  by (fact lcm_neg1)
+
+lemma lcm_neg_numeral_2 [simp]: "lcm a (- numeral n) = lcm a (numeral n)"
+  by (fact lcm_neg2)
+
+end
 
 class semiring_Gcd = semiring_gcd + Gcd +
   assumes Gcd_dvd: "a \<in> A \<Longrightarrow> Gcd A dvd a"
@@ -471,6 +1010,27 @@
     by (rule associated_eqI) (simp_all add: lcm_eq_0_iff)
 qed
 
+lemma LcmI:
+  assumes "\<And>a. a \<in> A \<Longrightarrow> a dvd b" and "\<And>c. (\<And>a. a \<in> A \<Longrightarrow> a dvd c) \<Longrightarrow> b dvd c"
+    and "normalize b = b" shows "b = Lcm A"
+  by (rule associated_eqI) (auto simp: assms dvd_Lcm intro: Lcm_least)
+
+lemma Lcm_subset:
+  "A \<subseteq> B \<Longrightarrow> Lcm A dvd Lcm B"
+  by (blast intro: Lcm_least dvd_Lcm)
+
+lemma Lcm_Un:
+  "Lcm (A \<union> B) = lcm (Lcm A) (Lcm B)"
+  apply (rule lcmI)
+  apply (blast intro: Lcm_subset)
+  apply (blast intro: Lcm_subset)
+  apply (intro Lcm_least ballI, elim UnE)
+  apply (rule dvd_trans, erule dvd_Lcm, assumption)
+  apply (rule dvd_trans, erule dvd_Lcm, assumption)
+  apply simp
+  done
+  
+
 lemma Gcd_0_iff [simp]:
   "Gcd A = 0 \<longleftrightarrow> A \<subseteq> {0}" (is "?P \<longleftrightarrow> ?Q")
 proof
@@ -518,20 +1078,6 @@
     by simp
 qed
 
-lemma unit_factor_Gcd:
-  "unit_factor (Gcd A) = (if \<forall>a\<in>A. a = 0 then 0 else 1)"
-proof (cases "Gcd A = 0")
-  case True then show ?thesis by auto
-next
-  case False
-  from unit_factor_mult_normalize
-  have "unit_factor (Gcd A) * normalize (Gcd A) = Gcd A" .
-  then have "unit_factor (Gcd A) * Gcd A = Gcd A" by simp
-  then have "unit_factor (Gcd A) * Gcd A div Gcd A = Gcd A div Gcd A" by simp
-  with False have "unit_factor (Gcd A) = 1" by simp
-  with False show ?thesis by auto
-qed
-
 lemma unit_factor_Lcm:
   "unit_factor (Lcm A) = (if Lcm A = 0 then 0 else 1)"
 proof (cases "Lcm A = 0")
@@ -544,6 +1090,18 @@
     by simp
 qed
 
+lemma unit_factor_Gcd: "unit_factor (Gcd A) = (if Gcd A = 0 then 0 else 1)"
+proof -
+  show "unit_factor (Gcd A) = (if Gcd A = 0 then 0 else 1)"
+    by (simp add: Gcd_Lcm unit_factor_Lcm)
+qed
+
+lemma GcdI:
+  assumes "\<And>a. a \<in> A \<Longrightarrow> b dvd a" and "\<And>c. (\<And>a. a \<in> A \<Longrightarrow> c dvd a) \<Longrightarrow> c dvd b"
+    and "normalize b = b"
+  shows "b = Gcd A"
+  by (rule associated_eqI) (auto simp: assms Gcd_dvd intro: Gcd_greatest)
+
 lemma Gcd_eq_1_I:
   assumes "is_unit a" and "a \<in> A"
   shows "Gcd A = 1"
@@ -585,13 +1143,26 @@
       (auto simp add: lcm_eq_0_iff)
 qed
 
-lemma Gcd_set [code_unfold]:
-  "Gcd (set as) = foldr gcd as 0"
-  by (induct as) simp_all
+lemma Gcd_finite:
+  assumes "finite A"
+  shows "Gcd A = Finite_Set.fold gcd 0 A"
+  by (induct rule: finite.induct[OF \<open>finite A\<close>])
+     (simp_all add: comp_fun_idem.fold_insert_idem[OF comp_fun_idem_gcd])
+
+lemma Gcd_set [code_unfold]: "Gcd (set as) = foldl gcd 0 as"
+  by (simp add: Gcd_finite comp_fun_idem.fold_set_fold[OF comp_fun_idem_gcd] 
+                foldl_conv_fold gcd.commute)
+
+lemma Lcm_finite:
+  assumes "finite A"
+  shows "Lcm A = Finite_Set.fold lcm 1 A"
+  by (induct rule: finite.induct[OF \<open>finite A\<close>])
+     (simp_all add: comp_fun_idem.fold_insert_idem[OF comp_fun_idem_lcm])
 
 lemma Lcm_set [code_unfold]:
-  "Lcm (set as) = foldr lcm as 1"
-  by (induct as) simp_all
+  "Lcm (set as) = foldl lcm 1 as"
+  by (simp add: Lcm_finite comp_fun_idem.fold_set_fold[OF comp_fun_idem_lcm] 
+                foldl_conv_fold lcm.commute)
 
 lemma Gcd_image_normalize [simp]:
   "Gcd (normalize ` A) = Gcd A"
@@ -624,6 +1195,76 @@
   shows "Lcm A = a"
   using assms by (blast intro: associated_eqI Lcm_least dvd_Lcm normalize_Lcm)
 
+
+lemma Lcm_no_units:
+  "Lcm A = Lcm (A - {a. is_unit a})"
+proof -
+  have "(A - {a. is_unit a}) \<union> {a\<in>A. is_unit a} = A" by blast
+  hence "Lcm A = lcm (Lcm (A - {a. is_unit a})) (Lcm {a\<in>A. is_unit a})"
+    by (simp add: Lcm_Un [symmetric])
+  also have "Lcm {a\<in>A. is_unit a} = 1" by (simp add: Lcm_1_iff)
+  finally show ?thesis by simp
+qed
+
+lemma Lcm_0_iff': "Lcm A = 0 \<longleftrightarrow> \<not>(\<exists>l. l \<noteq> 0 \<and> (\<forall>a\<in>A. a dvd l))"
+  by (metis Lcm_least dvd_0_left dvd_Lcm)
+
+lemma Lcm_no_multiple: "(\<forall>m. m \<noteq> 0 \<longrightarrow> (\<exists>a\<in>A. \<not>a dvd m)) \<Longrightarrow> Lcm A = 0"
+  by (auto simp: Lcm_0_iff')
+
+lemma Lcm_singleton [simp]:
+  "Lcm {a} = normalize a"
+  by simp
+
+lemma Lcm_2 [simp]:
+  "Lcm {a,b} = lcm a b"
+  by simp
+
+lemma Lcm_coprime:
+  assumes "finite A" and "A \<noteq> {}" 
+  assumes "\<And>a b. a \<in> A \<Longrightarrow> b \<in> A \<Longrightarrow> a \<noteq> b \<Longrightarrow> gcd a b = 1"
+  shows "Lcm A = normalize (\<Prod>A)"
+using assms proof (induct rule: finite_ne_induct)
+  case (insert a A)
+  have "Lcm (insert a A) = lcm a (Lcm A)" by simp
+  also from insert have "Lcm A = normalize (\<Prod>A)" by blast
+  also have "lcm a \<dots> = lcm a (\<Prod>A)" by (cases "\<Prod>A = 0") (simp_all add: lcm_div_unit2)
+  also from insert have "gcd a (\<Prod>A) = 1" by (subst gcd.commute, intro setprod_coprime) auto
+  with insert have "lcm a (\<Prod>A) = normalize (\<Prod>(insert a A))"
+    by (simp add: lcm_coprime)
+  finally show ?case .
+qed simp
+      
+lemma Lcm_coprime':
+  "card A \<noteq> 0 \<Longrightarrow> (\<And>a b. a \<in> A \<Longrightarrow> b \<in> A \<Longrightarrow> a \<noteq> b \<Longrightarrow> gcd a b = 1)
+    \<Longrightarrow> Lcm A = normalize (\<Prod>A)"
+  by (rule Lcm_coprime) (simp_all add: card_eq_0_iff)
+
+lemma Gcd_1:
+  "1 \<in> A \<Longrightarrow> Gcd A = 1"
+  by (auto intro!: Gcd_eq_1_I)
+
+lemma Gcd_singleton [simp]: "Gcd {a} = normalize a"
+  by simp
+
+lemma Gcd_2 [simp]: "Gcd {a,b} = gcd a b"
+  by simp
+
+
+definition pairwise_coprime where
+  "pairwise_coprime A = (\<forall>x y. x \<in> A \<and> y \<in> A \<and> x \<noteq> y \<longrightarrow> coprime x y)"
+
+lemma pairwise_coprimeI [intro?]:
+  "(\<And>x y. x \<in> A \<Longrightarrow> y \<in> A \<Longrightarrow> x \<noteq> y \<Longrightarrow> coprime x y) \<Longrightarrow> pairwise_coprime A"
+  by (simp add: pairwise_coprime_def)
+
+lemma pairwise_coprimeD:
+  "pairwise_coprime A \<Longrightarrow> x \<in> A \<Longrightarrow> y \<in> A \<Longrightarrow> x \<noteq> y \<Longrightarrow> coprime x y"
+  by (simp add: pairwise_coprime_def)
+
+lemma pairwise_coprime_subset: "pairwise_coprime A \<Longrightarrow> B \<subseteq> A \<Longrightarrow> pairwise_coprime B"
+  by (force simp: pairwise_coprime_def)
+
 end
 
 subsection \<open>GCD and LCM on @{typ nat} and @{typ int}\<close>
@@ -895,73 +1536,6 @@
   apply auto
 done
 
-context semiring_gcd
-begin
-
-lemma coprime_dvd_mult:
-  assumes "coprime a b" and "a dvd c * b"
-  shows "a dvd c"
-proof (cases "c = 0")
-  case True then show ?thesis by simp
-next
-  case False
-  then have unit: "is_unit (unit_factor c)" by simp
-  from \<open>coprime a b\<close> mult_gcd_left [of c a b]
-  have "gcd (c * a) (c * b) * unit_factor c = c"
-    by (simp add: ac_simps)
-  moreover from \<open>a dvd c * b\<close> have "a dvd gcd (c * a) (c * b) * unit_factor c"
-    by (simp add: dvd_mult_unit_iff unit)
-  ultimately show ?thesis by simp
-qed
-
-lemma coprime_dvd_mult_iff:
-  assumes "coprime a c"
-  shows "a dvd b * c \<longleftrightarrow> a dvd b"
-  using assms by (auto intro: coprime_dvd_mult)
-
-lemma gcd_mult_cancel:
-  "coprime c b \<Longrightarrow> gcd (c * a) b = gcd a b"
-  apply (rule associated_eqI)
-  apply (rule gcd_greatest)
-  apply (rule_tac b = c in coprime_dvd_mult)
-  apply (simp add: gcd.assoc)
-  apply (simp_all add: ac_simps)
-  done
-
-lemma coprime_crossproduct:
-  fixes a b c d
-  assumes "coprime a d" and "coprime b c"
-  shows "normalize a * normalize c = normalize b * normalize d
-    \<longleftrightarrow> normalize a = normalize b \<and> normalize c = normalize d" (is "?lhs \<longleftrightarrow> ?rhs")
-proof
-  assume ?rhs then show ?lhs by simp
-next
-  assume ?lhs
-  from \<open>?lhs\<close> have "normalize a dvd normalize b * normalize d"
-    by (auto intro: dvdI dest: sym)
-  with \<open>coprime a d\<close> have "a dvd b"
-    by (simp add: coprime_dvd_mult_iff normalize_mult [symmetric])
-  from \<open>?lhs\<close> have "normalize b dvd normalize a * normalize c"
-    by (auto intro: dvdI dest: sym)
-  with \<open>coprime b c\<close> have "b dvd a"
-    by (simp add: coprime_dvd_mult_iff normalize_mult [symmetric])
-  from \<open>?lhs\<close> have "normalize c dvd normalize d * normalize b"
-    by (auto intro: dvdI dest: sym simp add: mult.commute)
-  with \<open>coprime b c\<close> have "c dvd d"
-    by (simp add: coprime_dvd_mult_iff gcd.commute normalize_mult [symmetric])
-  from \<open>?lhs\<close> have "normalize d dvd normalize c * normalize a"
-    by (auto intro: dvdI dest: sym simp add: mult.commute)
-  with \<open>coprime a d\<close> have "d dvd c"
-    by (simp add: coprime_dvd_mult_iff gcd.commute normalize_mult [symmetric])
-  from \<open>a dvd b\<close> \<open>b dvd a\<close> have "normalize a = normalize b"
-    by (rule associatedI)
-  moreover from \<open>c dvd d\<close> \<open>d dvd c\<close> have "normalize c = normalize d"
-    by (rule associatedI)
-  ultimately show ?rhs ..
-qed
-
-end
-
 lemma coprime_crossproduct_nat:
   fixes a b c d :: nat
   assumes "coprime a d" and "coprime b c"
@@ -976,21 +1550,10 @@
 
 text \<open>\medskip Addition laws\<close>
 
-lemma gcd_add1_nat [simp]: "gcd ((m::nat) + n) n = gcd m n"
-  apply (case_tac "n = 0")
-  apply (simp_all add: gcd_non_0_nat)
-  done
-
-lemma gcd_add2_nat [simp]: "gcd (m::nat) (m + n) = gcd m n"
-  apply (subst (1 2) gcd.commute)
-  apply (subst add.commute)
-  apply simp
-  done
-
 (* to do: add the other variations? *)
 
 lemma gcd_diff1_nat: "(m::nat) >= n \<Longrightarrow> gcd (m - n) n = gcd m n"
-  by (subst gcd_add1_nat [symmetric]) auto
+  by (subst gcd_add1 [symmetric]) auto
 
 lemma gcd_diff2_nat: "(n::nat) >= m \<Longrightarrow> gcd (n - m) n = gcd m n"
   apply (subst gcd.commute)
@@ -1022,25 +1585,9 @@
   apply auto
 done
 
-lemma gcd_add1_int [simp]: "gcd ((m::int) + n) n = gcd m n"
-by (metis gcd_red_int mod_add_self1 add.commute)
-
-lemma gcd_add2_int [simp]: "gcd m ((m::int) + n) = gcd m n"
-by (metis gcd_add1_int gcd.commute add.commute)
-
-lemma gcd_add_mult_nat: "gcd (m::nat) (k * m + n) = gcd m n"
-by (metis mod_mult_self3 gcd.commute gcd_red_nat)
-
-lemma gcd_add_mult_int: "gcd (m::int) (k * m + n) = gcd m n"
-by (metis gcd.commute gcd_red_int mod_mult_self1 add.commute)
-
-
 (* to do: differences, and all variations of addition rules
     as simplification rules for nat and int *)
 
-lemma gcd_dvd_prod_nat: "gcd (m::nat) n dvd k * n"
-  using mult_dvd_mono [of 1] by auto
-
 (* to do: add the three variations of these, and for ints? *)
 
 lemma finite_divisors_nat [simp]: -- \<open>FIXME move\<close>
@@ -1104,49 +1651,6 @@
 
 subsection \<open>Coprimality\<close>
 
-context semiring_gcd
-begin
-
-lemma div_gcd_coprime:
-  assumes nz: "a \<noteq> 0 \<or> b \<noteq> 0"
-  shows "coprime (a div gcd a b) (b div gcd a b)"
-proof -
-  let ?g = "gcd a b"
-  let ?a' = "a div ?g"
-  let ?b' = "b div ?g"
-  let ?g' = "gcd ?a' ?b'"
-  have dvdg: "?g dvd a" "?g dvd b" by simp_all
-  have dvdg': "?g' dvd ?a'" "?g' dvd ?b'" by simp_all
-  from dvdg dvdg' obtain ka kb ka' kb' where
-      kab: "a = ?g * ka" "b = ?g * kb" "?a' = ?g' * ka'" "?b' = ?g' * kb'"
-    unfolding dvd_def by blast
-  from this [symmetric] have "?g * ?a' = (?g * ?g') * ka'" "?g * ?b' = (?g * ?g') * kb'"
-    by (simp_all add: mult.assoc mult.left_commute [of "gcd a b"])
-  then have dvdgg':"?g * ?g' dvd a" "?g* ?g' dvd b"
-    by (auto simp add: dvd_mult_div_cancel [OF dvdg(1)]
-      dvd_mult_div_cancel [OF dvdg(2)] dvd_def)
-  have "?g \<noteq> 0" using nz by simp
-  moreover from gcd_greatest [OF dvdgg'] have "?g * ?g' dvd ?g" .
-  thm dvd_mult_cancel_left
-  ultimately show ?thesis using dvd_times_left_cancel_iff [of "gcd a b" _ 1] by simp
-qed
-
-lemma coprime:
-  "coprime a b \<longleftrightarrow> (\<forall>d. d dvd a \<and> d dvd b \<longleftrightarrow> is_unit d)" (is "?P \<longleftrightarrow> ?Q")
-proof
-  assume ?P then show ?Q by auto
-next
-  assume ?Q
-  then have "is_unit (gcd a b) \<longleftrightarrow> gcd a b dvd a \<and> gcd a b dvd b"
-    by blast
-  then have "is_unit (gcd a b)"
-    by simp
-  then show ?P
-    by simp
-qed
-
-end
-
 lemma coprime_nat:
   "coprime (a::nat) b \<longleftrightarrow> (\<forall>d. d dvd a \<and> d dvd b \<longleftrightarrow> d = 1)"
   using coprime [of a b] by simp
@@ -1165,337 +1669,15 @@
   using abs_dvd_iff abs_ge_zero apply blast
   done
 
-lemma gcd_coprime_nat:
-  assumes z: "gcd (a::nat) b \<noteq> 0" and a: "a = a' * gcd a b" and
-    b: "b = b' * gcd a b"
-  shows    "coprime a' b'"
-
-  apply (subgoal_tac "a' = a div gcd a b")
-  apply (erule ssubst)
-  apply (subgoal_tac "b' = b div gcd a b")
-  apply (erule ssubst)
-  apply (rule div_gcd_coprime)
-  using z apply force
-  apply (subst (1) b)
-  using z apply force
-  apply (subst (1) a)
-  using z apply force
-  done
-
-lemma gcd_coprime_int:
-  assumes z: "gcd (a::int) b \<noteq> 0" and a: "a = a' * gcd a b" and
-    b: "b = b' * gcd a b"
-  shows    "coprime a' b'"
-  apply (subgoal_tac "a' = a div gcd a b")
-  apply (erule ssubst)
-  apply (subgoal_tac "b' = b div gcd a b")
-  apply (erule ssubst)
-  apply (rule div_gcd_coprime)
-  using z apply force
-  apply (subst (1) b)
-  using z apply force
-  apply (subst (1) a)
-  using z apply force
-  done
-
-context semiring_gcd
-begin
-
-lemma coprime_mult:
-  assumes da: "coprime d a" and db: "coprime d b"
-  shows "coprime d (a * b)"
-  apply (subst gcd.commute)
-  using da apply (subst gcd_mult_cancel)
-  apply (subst gcd.commute, assumption)
-  apply (subst gcd.commute, rule db)
-  done
-
-end
-
-lemma coprime_lmult_nat:
-  assumes dab: "coprime (d::nat) (a * b)" shows "coprime d a"
-proof -
-  have "gcd d a dvd gcd d (a * b)"
-    by (rule gcd_greatest, auto)
-  with dab show ?thesis
-    by auto
-qed
-
-lemma coprime_lmult_int:
-  assumes "coprime (d::int) (a * b)" shows "coprime d a"
-proof -
-  have "gcd d a dvd gcd d (a * b)"
-    by (rule gcd_greatest, auto)
-  with assms show ?thesis
-    by auto
-qed
-
-lemma coprime_rmult_nat:
-  assumes "coprime (d::nat) (a * b)" shows "coprime d b"
-proof -
-  have "gcd d b dvd gcd d (a * b)"
-    by (rule gcd_greatest, auto intro: dvd_mult)
-  with assms show ?thesis
-    by auto
-qed
-
-lemma coprime_rmult_int:
-  assumes dab: "coprime (d::int) (a * b)" shows "coprime d b"
-proof -
-  have "gcd d b dvd gcd d (a * b)"
-    by (rule gcd_greatest, auto intro: dvd_mult)
-  with dab show ?thesis
-    by auto
-qed
-
-lemma coprime_mul_eq_nat: "coprime (d::nat) (a * b) \<longleftrightarrow>
-    coprime d a \<and>  coprime d b"
-  using coprime_rmult_nat[of d a b] coprime_lmult_nat[of d a b]
-    coprime_mult [of d a b]
-  by blast
-
-lemma coprime_mul_eq_int: "coprime (d::int) (a * b) \<longleftrightarrow>
-    coprime d a \<and>  coprime d b"
-  using coprime_rmult_int[of d a b] coprime_lmult_int[of d a b]
-    coprime_mult [of d a b]
-  by blast
-
-lemma coprime_power_int:
-  assumes "0 < n" shows "coprime (a :: int) (b ^ n) \<longleftrightarrow> coprime a b"
-  using assms
-proof (induct n)
-  case (Suc n) then show ?case
-    by (cases n) (simp_all add: coprime_mul_eq_int)
-qed simp
-
-lemma gcd_coprime_exists_nat:
-    assumes nz: "gcd (a::nat) b \<noteq> 0"
-    shows "\<exists>a' b'. a = a' * gcd a b \<and> b = b' * gcd a b \<and> coprime a' b'"
-  apply (rule_tac x = "a div gcd a b" in exI)
-  apply (rule_tac x = "b div gcd a b" in exI)
-  using nz apply (auto simp add: div_gcd_coprime dvd_div_mult)
-done
-
-lemma gcd_coprime_exists_int:
-    assumes nz: "gcd (a::int) b \<noteq> 0"
-    shows "\<exists>a' b'. a = a' * gcd a b \<and> b = b' * gcd a b \<and> coprime a' b'"
-  apply (rule_tac x = "a div gcd a b" in exI)
-  apply (rule_tac x = "b div gcd a b" in exI)
-  using nz apply (auto simp add: div_gcd_coprime)
-done
-
-lemma coprime_exp_nat: "coprime (d::nat) a \<Longrightarrow> coprime d (a^n)"
-  by (induct n) (simp_all add: coprime_mult)
-
-lemma coprime_exp_int: "coprime (d::int) a \<Longrightarrow> coprime d (a^n)"
-  by (induct n) (simp_all add: coprime_mult)
-
-context semiring_gcd
-begin
-
-lemma coprime_exp_left:
-  assumes "coprime a b"
-  shows "coprime (a ^ n) b"
-  using assms by (induct n) (simp_all add: gcd_mult_cancel)
-
-lemma coprime_exp2:
-  assumes "coprime a b"
-  shows "coprime (a ^ n) (b ^ m)"
-proof (rule coprime_exp_left)
-  from assms show "coprime a (b ^ m)"
-    by (induct m) (simp_all add: gcd_mult_cancel gcd.commute [of a])
-qed
-
-end
-
-lemma gcd_exp_nat:
-  "gcd ((a :: nat) ^ n) (b ^ n) = gcd a b ^ n"
-proof (cases "a = 0 \<and> b = 0")
-  case True then show ?thesis by (cases "n > 0") (simp_all add: zero_power)
-next
-  case False
-  then have "coprime (a div gcd a b) (b div gcd a b)"
-    by (auto simp: div_gcd_coprime)
-  then have "coprime ((a div gcd a b) ^ n) ((b div gcd a b) ^ n)"
-    by (simp add: coprime_exp2)
-  then have "gcd ((a div gcd a b)^n * (gcd a b)^n)
-      ((b div gcd a b)^n * (gcd a b)^n) = (gcd a b)^n"
-    by (metis gcd_mult_distrib_nat mult.commute mult.right_neutral)
-  also have "(a div gcd a b)^n * (gcd a b)^n = a^n"
-    by (metis dvd_div_mult_self gcd_unique_nat power_mult_distrib)
-  also have "(b div gcd a b)^n * (gcd a b)^n = b^n"
-    by (metis dvd_div_mult_self gcd_unique_nat power_mult_distrib)
-  finally show ?thesis .
-qed
-
-lemma gcd_exp_int: "gcd ((a::int)^n) (b^n) = (gcd a b)^n"
-  apply (subst (1 2) gcd_abs_int)
-  apply (subst (1 2) power_abs)
-  apply (rule gcd_exp_nat [where n = n, transferred])
-  apply auto
-done
-
-lemma division_decomp_nat: assumes dc: "(a::nat) dvd b * c"
-  shows "\<exists>b' c'. a = b' * c' \<and> b' dvd b \<and> c' dvd c"
-proof-
-  let ?g = "gcd a b"
-  {assume "?g = 0" with dc have ?thesis by auto}
-  moreover
-  {assume z: "?g \<noteq> 0"
-    from gcd_coprime_exists_nat[OF z]
-    obtain a' b' where ab': "a = a' * ?g" "b = b' * ?g" "coprime a' b'"
-      by blast
-    have thb: "?g dvd b" by auto
-    from ab'(1) have "a' dvd a"  unfolding dvd_def by blast
-    with dc have th0: "a' dvd b*c" using dvd_trans[of a' a "b*c"] by simp
-    from dc ab'(1,2) have "a'*?g dvd (b'*?g) *c" by auto
-    hence "?g*a' dvd ?g * (b' * c)" by (simp add: mult.assoc)
-    with z have th_1: "a' dvd b' * c" by auto
-    from coprime_dvd_mult [OF ab'(3)] th_1
-    have thc: "a' dvd c" by (subst (asm) mult.commute, blast)
-    from ab' have "a = ?g*a'" by algebra
-    with thb thc have ?thesis by blast }
-  ultimately show ?thesis by blast
-qed
-
-lemma division_decomp_int: assumes dc: "(a::int) dvd b * c"
-  shows "\<exists>b' c'. a = b' * c' \<and> b' dvd b \<and> c' dvd c"
-proof-
-  let ?g = "gcd a b"
-  {assume "?g = 0" with dc have ?thesis by auto}
-  moreover
-  {assume z: "?g \<noteq> 0"
-    from gcd_coprime_exists_int[OF z]
-    obtain a' b' where ab': "a = a' * ?g" "b = b' * ?g" "coprime a' b'"
-      by blast
-    have thb: "?g dvd b" by auto
-    from ab'(1) have "a' dvd a"  unfolding dvd_def by blast
-    with dc have th0: "a' dvd b*c"
-      using dvd_trans[of a' a "b*c"] by simp
-    from dc ab'(1,2) have "a'*?g dvd (b'*?g) *c" by auto
-    hence "?g*a' dvd ?g * (b' * c)" by (simp add: ac_simps)
-    with z have th_1: "a' dvd b' * c" by auto
-    from coprime_dvd_mult [OF ab'(3)] th_1
-    have thc: "a' dvd c" by (subst (asm) mult.commute, blast)
-    from ab' have "a = ?g*a'" by algebra
-    with thb thc have ?thesis by blast }
-  ultimately show ?thesis by blast
-qed
-
-lemma pow_divides_pow_nat:
-  assumes ab: "(a::nat) ^ n dvd b ^n" and n:"n \<noteq> 0"
-  shows "a dvd b"
-proof-
-  let ?g = "gcd a b"
-  from n obtain m where m: "n = Suc m" by (cases n, simp_all)
-  {assume "?g = 0" with ab n have ?thesis by auto }
-  moreover
-  {assume z: "?g \<noteq> 0"
-    hence zn: "?g ^ n \<noteq> 0" using n by simp
-    from gcd_coprime_exists_nat[OF z]
-    obtain a' b' where ab': "a = a' * ?g" "b = b' * ?g" "coprime a' b'"
-      by blast
-    from ab have "(a' * ?g) ^ n dvd (b' * ?g)^n"
-      by (simp add: ab'(1,2)[symmetric])
-    hence "?g^n*a'^n dvd ?g^n *b'^n"
-      by (simp only: power_mult_distrib mult.commute)
-    then have th0: "a'^n dvd b'^n"
-      using zn by auto
-    have "a' dvd a'^n" by (simp add: m)
-    with th0 have "a' dvd b'^n" using dvd_trans[of a' "a'^n" "b'^n"] by simp
-    hence th1: "a' dvd b'^m * b'" by (simp add: m mult.commute)
-    from coprime_dvd_mult [OF coprime_exp_nat [OF ab'(3), of m]] th1
-    have "a' dvd b'" by (subst (asm) mult.commute, blast)
-    hence "a'*?g dvd b'*?g" by simp
-    with ab'(1,2)  have ?thesis by simp }
-  ultimately show ?thesis by blast
-qed
-
-lemma pow_divides_pow_int:
-  assumes ab: "(a::int) ^ n dvd b ^n" and n:"n \<noteq> 0"
-  shows "a dvd b"
-proof-
-  let ?g = "gcd a b"
-  from n obtain m where m: "n = Suc m" by (cases n, simp_all)
-  {assume "?g = 0" with ab n have ?thesis by auto }
-  moreover
-  {assume z: "?g \<noteq> 0"
-    hence zn: "?g ^ n \<noteq> 0" using n by simp
-    from gcd_coprime_exists_int[OF z]
-    obtain a' b' where ab': "a = a' * ?g" "b = b' * ?g" "coprime a' b'"
-      by blast
-    from ab have "(a' * ?g) ^ n dvd (b' * ?g)^n"
-      by (simp add: ab'(1,2)[symmetric])
-    hence "?g^n*a'^n dvd ?g^n *b'^n"
-      by (simp only: power_mult_distrib mult.commute)
-    with zn z n have th0:"a'^n dvd b'^n" by auto
-    have "a' dvd a'^n" by (simp add: m)
-    with th0 have "a' dvd b'^n"
-      using dvd_trans[of a' "a'^n" "b'^n"] by simp
-    hence th1: "a' dvd b'^m * b'" by (simp add: m mult.commute)
-    from coprime_dvd_mult [OF coprime_exp_int [OF ab'(3), of m]] th1
-    have "a' dvd b'" by (subst (asm) mult.commute, blast)
-    hence "a'*?g dvd b'*?g" by simp
-    with ab'(1,2)  have ?thesis by simp }
-  ultimately show ?thesis by blast
-qed
-
 lemma pow_divides_eq_nat [simp]:
   "n > 0 \<Longrightarrow> (a::nat) ^ n dvd b ^ n \<longleftrightarrow> a dvd b"
-  by (auto intro: pow_divides_pow_nat dvd_power_same)
-
-lemma pow_divides_eq_int [simp]:
-  "n ~= 0 \<Longrightarrow> (a::int) ^ n dvd b ^ n \<longleftrightarrow> a dvd b"
-  by (auto intro: pow_divides_pow_int dvd_power_same)
-
-context semiring_gcd
-begin
-
-lemma divides_mult:
-  assumes "a dvd c" and nr: "b dvd c" and "coprime a b"
-  shows "a * b dvd c"
-proof-
-  from \<open>b dvd c\<close> obtain b' where"c = b * b'" ..
-  with \<open>a dvd c\<close> have "a dvd b' * b"
-    by (simp add: ac_simps)
-  with \<open>coprime a b\<close> have "a dvd b'"
-    by (simp add: coprime_dvd_mult_iff)
-  then obtain a' where "b' = a * a'" ..
-  with \<open>c = b * b'\<close> have "c = (a * b) * a'"
-    by (simp add: ac_simps)
-  then show ?thesis ..
-qed
-
-end
-
-lemma coprime_plus_one_nat [simp]: "coprime ((n::nat) + 1) n"
-  by (simp add: gcd.commute del: One_nat_def)
+  using pow_divs_eq[of n] by simp
 
 lemma coprime_Suc_nat [simp]: "coprime (Suc n) n"
-  using coprime_plus_one_nat by simp
-
-lemma coprime_plus_one_int [simp]: "coprime ((n::int) + 1) n"
-  by (simp add: gcd.commute)
+  using coprime_plus_one[of n] by simp
 
 lemma coprime_minus_one_nat: "(n::nat) \<noteq> 0 \<Longrightarrow> coprime (n - 1) n"
-  using coprime_plus_one_nat [of "n - 1"]
-    gcd.commute [of "n - 1" n] by auto
-
-lemma coprime_minus_one_int: "coprime ((n::int) - 1) n"
-  using coprime_plus_one_int [of "n - 1"]
-    gcd.commute [of "n - 1" n] by auto
-
-lemma setprod_coprime_nat:
-  fixes x :: nat
-  shows "(\<And>i. i \<in> A \<Longrightarrow> coprime (f i) x) \<Longrightarrow> coprime (\<Prod>i\<in>A. f i) x"
-  by (induct A rule: infinite_finite_induct)
-    (auto simp add: gcd_mult_cancel One_nat_def [symmetric] simp del: One_nat_def)
-
-lemma setprod_coprime_int:
-  fixes x :: int
-  shows "(\<And>i. i \<in> A \<Longrightarrow> coprime (f i) x) \<Longrightarrow> coprime (\<Prod>i\<in>A. f i) x"
-  by (induct A rule: infinite_finite_induct)
-    (auto simp add: gcd_mult_cancel)
+  using coprime_Suc_nat [of "n - 1"] gcd.commute [of "n - 1" n] by auto
 
 lemma coprime_common_divisor_nat: 
   "coprime (a::nat) b \<Longrightarrow> x dvd a \<Longrightarrow> x dvd b \<Longrightarrow> x = 1"
@@ -1505,15 +1687,11 @@
   "coprime (a::int) b \<Longrightarrow> x dvd a \<Longrightarrow> x dvd b \<Longrightarrow> \<bar>x\<bar> = 1"
   using gcd_greatest_iff [of x a b] by auto
 
-lemma coprime_divisors_nat:
-    "(d::int) dvd a \<Longrightarrow> e dvd b \<Longrightarrow> coprime a b \<Longrightarrow> coprime d e"
-  by (meson coprime_int dvd_trans gcd_dvd1 gcd_dvd2 gcd_ge_0_int)
-
 lemma invertible_coprime_nat: "(x::nat) * y mod m = 1 \<Longrightarrow> coprime x m"
-by (metis coprime_lmult_nat gcd_1_nat gcd.commute gcd_red_nat)
+by (metis coprime_lmult gcd_1_nat gcd.commute gcd_red_nat)
 
 lemma invertible_coprime_int: "(x::int) * y mod m = 1 \<Longrightarrow> coprime x m"
-by (metis coprime_lmult_int gcd_1_int gcd.commute gcd_red_int)
+by (metis coprime_lmult gcd_1_int gcd.commute gcd_red_int)
 
 
 subsection \<open>Bezout's theorem\<close>
@@ -1763,7 +1941,7 @@
 
 lemma prod_gcd_lcm_nat: "(m::nat) * n = gcd m n * lcm m n"
   unfolding lcm_nat_def
-  by (simp add: dvd_mult_div_cancel [OF gcd_dvd_prod_nat])
+  by (simp add: dvd_mult_div_cancel [OF gcd_dvd_prod])
 
 lemma prod_gcd_lcm_int: "\<bar>m::int\<bar> * \<bar>n\<bar> = gcd m n * lcm m n"
   unfolding lcm_int_def gcd_int_def
@@ -1828,14 +2006,6 @@
 lemma lcm_proj2_iff_int [simp]: "lcm m n = \<bar>n::int\<bar> \<longleftrightarrow> m dvd n"
 by (metis dvd_abs_iff lcm_proj2_if_dvd_int lcm_unique_int)
 
-lemma (in semiring_gcd) comp_fun_idem_gcd:
-  "comp_fun_idem gcd"
-  by standard (simp_all add: fun_eq_iff ac_simps)
-
-lemma (in semiring_gcd) comp_fun_idem_lcm:
-  "comp_fun_idem lcm"
-  by standard (simp_all add: fun_eq_iff ac_simps)
-
 lemma lcm_1_iff_nat [simp]:
   "lcm (m::nat) n = Suc 0 \<longleftrightarrow> m = Suc 0 \<and> n = Suc 0"
   using lcm_eq_1_iff [of m n] by simp
@@ -2069,21 +2239,11 @@
 
 text \<open>Some code equations\<close>
 
-lemma Lcm_set_nat [code, code_unfold]:
-  "Lcm (set ns) = fold lcm ns (1::nat)"
-  using Lcm_set [of ns] by (simp_all add: fun_eq_iff ac_simps foldr_fold [symmetric])
-
-lemma Gcd_set_nat [code]:
-  "Gcd (set ns) = fold gcd ns (0::nat)"
-  using Gcd_set [of ns] by (simp_all add: fun_eq_iff ac_simps foldr_fold [symmetric])
+lemmas Lcm_set_nat [code, code_unfold] = Lcm_set[where ?'a = nat]
+lemmas Gcd_set_nat [code] = Gcd_set[where ?'a = nat]
+lemmas Lcm_set_int [code, code_unfold] = Lcm_set[where ?'a = int]
+lemmas Gcd_set_int [code] = Gcd_set[where ?'a = int]
 
-lemma Lcm_set_int [code, code_unfold]:
-  "Lcm (set xs) = fold lcm xs (1::int)"
-  using Lcm_set [of xs] by (simp_all add: fun_eq_iff ac_simps foldr_fold [symmetric])
-
-lemma Gcd_set_int [code]:
-  "Gcd (set xs) = fold gcd xs (0::int)"
-  using Gcd_set [of xs] by (simp_all add: fun_eq_iff ac_simps foldr_fold [symmetric])
 
 text \<open>Fact aliasses\<close>
 
--- a/src/HOL/HOLCF/IOA/Abstraction.thy	Mon Feb 29 11:42:15 2016 +0000
+++ b/src/HOL/HOLCF/IOA/Abstraction.thy	Mon Feb 29 15:13:11 2016 +0000
@@ -53,7 +53,7 @@
 
 (* analog to the proved thm strength_Next - proof skipped as trivial *)
 axiomatization where
-  weak_Next: "temp_weakening P Q h \<Longrightarrow> temp_weakening (Next P) (Next Q) h"
+  weak_Next: "temp_weakening P Q h \<Longrightarrow> temp_weakening (\<circle>P) (\<circle>Q) h"
 
 
 subsection \<open>\<open>cex_abs\<close>\<close>
@@ -382,7 +382,7 @@
   apply (pair a)
   done
 
-lemma strength_Next: "temp_strengthening P Q h \<Longrightarrow> temp_strengthening (Next P) (Next Q) h"
+lemma strength_Next: "temp_strengthening P Q h \<Longrightarrow> temp_strengthening (\<circle>P) (\<circle>Q) h"
   apply (unfold temp_strengthening_def state_strengthening_def temp_sat_def satisfies_def Next_def)
   apply simp
   apply auto
--- a/src/HOL/HOLCF/IOA/TL.thy	Mon Feb 29 11:42:15 2016 +0000
+++ b/src/HOL/HOLCF/IOA/TL.thy	Mon Feb 29 15:13:11 2016 +0000
@@ -22,8 +22,8 @@
   where "Init P s = P (unlift (HD $ s))"
     \<comment> \<open>this means that for \<open>nil\<close> and \<open>UU\<close> the effect is unpredictable\<close>
 
-definition Next :: "'a temporal \<Rightarrow> 'a temporal"
-  where "(Next P) s \<longleftrightarrow> (if TL $ s = UU \<or> TL $ s = nil then P s else P (TL $ s))"
+definition Next :: "'a temporal \<Rightarrow> 'a temporal"  ("\<circle>(_)" [80] 80)
+  where "(\<circle>P) s \<longleftrightarrow> (if TL $ s = UU \<or> TL $ s = nil then P s else P (TL $ s))"
 
 definition suffix :: "'a Seq \<Rightarrow> 'a Seq \<Rightarrow> bool"
   where "suffix s2 s \<longleftrightarrow> (\<exists>s1. Finite s1 \<and> s = s1 @@ s2)"
@@ -120,14 +120,14 @@
 
 lemmas tsuffix_TL2 = conjI [THEN tsuffix_TL]
 
-lemma LTL1: "s \<noteq> UU \<and> s \<noteq> nil \<longrightarrow> (s \<Turnstile> \<box>F \<^bold>\<longrightarrow> (F \<^bold>\<and> (Next (\<box>F))))"
+lemma LTL1: "s \<noteq> UU \<and> s \<noteq> nil \<longrightarrow> (s \<Turnstile> \<box>F \<^bold>\<longrightarrow> (F \<^bold>\<and> (\<circle>(\<box>F))))"
   supply if_split [split del] 
   apply (unfold Next_def satisfies_def NOT_def IMPLIES_def AND_def Box_def)
   apply auto
   text \<open>\<open>\<box>F \<^bold>\<longrightarrow> F\<close>\<close>
   apply (erule_tac x = "s" in allE)
   apply (simp add: tsuffix_def suffix_refl)
-  text \<open>\<open>\<box>F \<^bold>\<longrightarrow> Next \<box>F\<close>\<close>
+  text \<open>\<open>\<box>F \<^bold>\<longrightarrow> \<circle>\<box>F\<close>\<close>
   apply (simp split add: if_split)
   apply auto
   apply (drule tsuffix_TL2)
@@ -135,13 +135,13 @@
   apply auto
   done
 
-lemma LTL2a: "s \<Turnstile> \<^bold>\<not> (Next F) \<^bold>\<longrightarrow> (Next (\<^bold>\<not> F))"
+lemma LTL2a: "s \<Turnstile> \<^bold>\<not> (\<circle>F) \<^bold>\<longrightarrow> (\<circle>(\<^bold>\<not> F))"
   by (simp add: Next_def satisfies_def NOT_def IMPLIES_def)
 
-lemma LTL2b: "s \<Turnstile> (Next (\<^bold>\<not> F)) \<^bold>\<longrightarrow> (\<^bold>\<not> (Next F))"
+lemma LTL2b: "s \<Turnstile> (\<circle>(\<^bold>\<not> F)) \<^bold>\<longrightarrow> (\<^bold>\<not> (\<circle>F))"
   by (simp add: Next_def satisfies_def NOT_def IMPLIES_def)
 
-lemma LTL3: "ex \<Turnstile> (Next (F \<^bold>\<longrightarrow> G)) \<^bold>\<longrightarrow> (Next F) \<^bold>\<longrightarrow> (Next G)"
+lemma LTL3: "ex \<Turnstile> (\<circle>(F \<^bold>\<longrightarrow> G)) \<^bold>\<longrightarrow> (\<circle>F) \<^bold>\<longrightarrow> (\<circle>G)"
   by (simp add: Next_def satisfies_def NOT_def IMPLIES_def)
 
 lemma ModusPonens: "\<^bold>\<TTurnstile> (P \<^bold>\<longrightarrow> Q) \<Longrightarrow> \<^bold>\<TTurnstile> P \<Longrightarrow> \<^bold>\<TTurnstile> Q"
--- a/src/HOL/HOLCF/IOA/TLS.thy	Mon Feb 29 11:42:15 2016 +0000
+++ b/src/HOL/HOLCF/IOA/TLS.thy	Mon Feb 29 15:13:11 2016 +0000
@@ -137,7 +137,7 @@
 lemma TL_TLS:
   "\<forall>s a t. (P s) \<and> s \<midarrow>a\<midarrow>A\<rightarrow> t \<longrightarrow> (Q t)
     \<Longrightarrow> ex \<TTurnstile> (Init (\<lambda>(s, a, t). P s) \<^bold>\<and> Init (\<lambda>(s, a, t). s \<midarrow>a\<midarrow>A\<rightarrow> t)
-              \<^bold>\<longrightarrow> (Next (Init (\<lambda>(s, a, t). Q s))))"
+              \<^bold>\<longrightarrow> (\<circle>(Init (\<lambda>(s, a, t). Q s))))"
   apply (unfold Init_def Next_def temp_sat_def satisfies_def IMPLIES_def AND_def)
   apply clarify
   apply (simp split add: if_split)
--- a/src/HOL/Import/import_rule.ML	Mon Feb 29 11:42:15 2016 +0000
+++ b/src/HOL/Import/import_rule.ML	Mon Feb 29 15:13:11 2016 +0000
@@ -425,11 +425,7 @@
       | process tstate (#"l", [t1, t2]) =
           gettm t1 tstate ||>> gettm t2 |>> (fn (t1, t2) => Thm.lambda t1 t2) |-> settm
       | process (thy, state) (#"+", [s]) =
-          let
-            val _ = tracing ("NOTING " ^ log_timestamp () ^ ": " ^ s)
-          in
-            (store_thm (Binding.name (transl_dot s)) (last_thm state) thy, state)
-          end
+          (store_thm (Binding.name (transl_dot s)) (last_thm state) thy, state)
       | process _ (c, _) = error ("process: unknown command: " ^ String.implode [c])
 
     fun parse_line s =
--- a/src/HOL/Isar_Examples/Fibonacci.thy	Mon Feb 29 11:42:15 2016 +0000
+++ b/src/HOL/Isar_Examples/Fibonacci.thy	Mon Feb 29 15:13:11 2016 +0000
@@ -80,7 +80,7 @@
   also have "\<dots> = fib (n + 2) + fib (n + 1)"
     by simp
   also have "gcd (fib (n + 2)) \<dots> = gcd (fib (n + 2)) (fib (n + 1))"
-    by (rule gcd_add2_nat)
+    by (rule gcd_add2)
   also have "\<dots> = gcd (fib (n + 1)) (fib (n + 1 + 1))"
     by (simp add: gcd.commute)
   also assume "\<dots> = 1"
--- a/src/HOL/Library/Multiset.thy	Mon Feb 29 11:42:15 2016 +0000
+++ b/src/HOL/Library/Multiset.thy	Mon Feb 29 15:13:11 2016 +0000
@@ -25,12 +25,6 @@
 
 setup_lifting type_definition_multiset
 
-abbreviation Melem :: "'a \<Rightarrow> 'a multiset \<Rightarrow> bool"  (infix "\<in>#" 50)
-  where "a \<in># M \<equiv> 0 < count M a"
-
-notation (ASCII)
-  Melem  ("(_/ :# _)" [50, 51] 50)  (* FIXME !? *)
-
 lemma multiset_eq_iff: "M = N \<longleftrightarrow> (\<forall>a. count M a = count N a)"
   by (simp only: count_inject [symmetric] fun_eq_iff)
 
@@ -114,29 +108,154 @@
 
 subsection \<open>Basic operations\<close>
 
+subsubsection \<open>Conversion to set and membership\<close>
+
+definition set_mset :: "'a multiset \<Rightarrow> 'a set"
+  where "set_mset M = {x. count M x > 0}"
+
+abbreviation Melem :: "'a \<Rightarrow> 'a multiset \<Rightarrow> bool"  (infix "\<in>#" 50)
+  where "a \<in># M \<equiv> a \<in> set_mset M"
+
+abbreviation not_Melem :: "'a \<Rightarrow> 'a multiset \<Rightarrow> bool"  (infix "\<notin>#" 50)
+  where "a \<notin># M \<equiv> a \<notin> set_mset M"
+
+context
+begin
+
+qualified abbreviation Ball :: "'a multiset \<Rightarrow> ('a \<Rightarrow> bool) \<Rightarrow> bool"
+  where "Ball M \<equiv> Set.Ball (set_mset M)"
+
+qualified abbreviation Bex :: "'a multiset \<Rightarrow> ('a \<Rightarrow> bool) \<Rightarrow> bool"
+  where "Bex M \<equiv> Set.Bex (set_mset M)"
+
+end
+
+syntax
+  "_MBall"       :: "pttrn \<Rightarrow> 'a set \<Rightarrow> bool \<Rightarrow> bool"      ("(3\<forall>_\<in>#_./ _)" [0, 0, 10] 10)
+  "_MBex"        :: "pttrn \<Rightarrow> 'a set \<Rightarrow> bool \<Rightarrow> bool"      ("(3\<exists>_\<in>#_./ _)" [0, 0, 10] 10)
+
+translations
+  "\<forall>x\<in>#A. P" \<rightleftharpoons> "CONST Multiset.Ball A (\<lambda>x. P)"
+  "\<exists>x\<in>#A. P" \<rightleftharpoons> "CONST Multiset.Bex A (\<lambda>x. P)"
+
+lemma count_eq_zero_iff:
+  "count M x = 0 \<longleftrightarrow> x \<notin># M"
+  by (auto simp add: set_mset_def)
+
+lemma not_in_iff:
+  "x \<notin># M \<longleftrightarrow> count M x = 0"
+  by (auto simp add: count_eq_zero_iff)
+
+lemma count_greater_zero_iff [simp]:
+  "count M x > 0 \<longleftrightarrow> x \<in># M"
+  by (auto simp add: set_mset_def)
+
+lemma count_inI:
+  assumes "count M x = 0 \<Longrightarrow> False"
+  shows "x \<in># M"
+proof (rule ccontr)
+  assume "x \<notin># M"
+  with assms show False by (simp add: not_in_iff)
+qed
+
+lemma in_countE:
+  assumes "x \<in># M"
+  obtains n where "count M x = Suc n"
+proof -
+  from assms have "count M x > 0" by simp
+  then obtain n where "count M x = Suc n"
+    using gr0_conv_Suc by blast
+  with that show thesis .
+qed
+
+lemma count_greater_eq_Suc_zero_iff [simp]:
+  "count M x \<ge> Suc 0 \<longleftrightarrow> x \<in># M"
+  by (simp add: Suc_le_eq)
+
+lemma count_greater_eq_one_iff [simp]:
+  "count M x \<ge> 1 \<longleftrightarrow> x \<in># M"
+  by simp
+
+lemma set_mset_empty [simp]:
+  "set_mset {#} = {}"
+  by (simp add: set_mset_def)
+
+lemma set_mset_single [simp]:
+  "set_mset {#b#} = {b}"
+  by (simp add: set_mset_def)
+
+lemma set_mset_eq_empty_iff [simp]:
+  "set_mset M = {} \<longleftrightarrow> M = {#}"
+  by (auto simp add: multiset_eq_iff count_eq_zero_iff)
+
+lemma finite_set_mset [iff]:
+  "finite (set_mset M)"
+  using count [of M] by (simp add: multiset_def)
+
+
 subsubsection \<open>Union\<close>
 
-lemma count_union [simp]: "count (M + N) a = count M a + count N a"
+lemma count_union [simp]:
+  "count (M + N) a = count M a + count N a"
   by (simp add: plus_multiset.rep_eq)
 
+lemma set_mset_union [simp]:
+  "set_mset (M + N) = set_mset M \<union> set_mset N"
+  by (simp only: set_eq_iff count_greater_zero_iff [symmetric] count_union) simp
+
 
 subsubsection \<open>Difference\<close>
 
-instantiation multiset :: (type) comm_monoid_diff
-begin
-
-instance
-  by (standard; transfer; simp add: fun_eq_iff)
-
-end
-
-lemma count_diff [simp]: "count (M - N) a = count M a - count N a"
+instance multiset :: (type) comm_monoid_diff
+  by standard (transfer; simp add: fun_eq_iff)
+
+lemma count_diff [simp]:
+  "count (M - N) a = count M a - count N a"
   by (simp add: minus_multiset.rep_eq)
 
+lemma in_diff_count:
+  "a \<in># M - N \<longleftrightarrow> count N a < count M a"
+  by (simp add: set_mset_def)
+
+lemma count_in_diffI:
+  assumes "\<And>n. count N x = n + count M x \<Longrightarrow> False"
+  shows "x \<in># M - N"
+proof (rule ccontr)
+  assume "x \<notin># M - N"
+  then have "count N x = (count N x - count M x) + count M x"
+    by (simp add: in_diff_count not_less)
+  with assms show False by auto
+qed
+
+lemma in_diff_countE:
+  assumes "x \<in># M - N"
+  obtains n where "count M x = Suc n + count N x"
+proof -
+  from assms have "count M x - count N x > 0" by (simp add: in_diff_count)
+  then have "count M x > count N x" by simp
+  then obtain n where "count M x = Suc n + count N x"
+    using less_iff_Suc_add by auto
+  with that show thesis .
+qed
+
+lemma in_diffD:
+  assumes "a \<in># M - N"
+  shows "a \<in># M"
+proof -
+  have "0 \<le> count N a" by simp
+  also from assms have "count N a < count M a"
+    by (simp add: in_diff_count)
+  finally show ?thesis by simp
+qed
+
+lemma set_mset_diff:
+  "set_mset (M - N) = {a. count N a < count M a}"
+  by (simp add: set_mset_def)
+
 lemma diff_empty [simp]: "M - {#} = M \<and> {#} - M = {#}"
   by rule (fact Groups.diff_zero, fact Groups.zero_diff)
 
-lemma diff_cancel[simp]: "A - A = {#}"
+lemma diff_cancel [simp]: "A - A = {#}"
   by (fact Groups.diff_cancel)
 
 lemma diff_union_cancelR [simp]: "M + N - N = (M::'a multiset)"
@@ -164,8 +283,22 @@
 lemma diff_union_swap: "a \<noteq> b \<Longrightarrow> M - {#a#} + {#b#} = M + {#b#} - {#a#}"
   by (auto simp add: multiset_eq_iff)
 
-lemma diff_union_single_conv: "a \<in># J \<Longrightarrow> I + J - {#a#} = I + (J - {#a#})"
-  by (simp add: multiset_eq_iff)
+lemma diff_union_single_conv:
+  "a \<in># J \<Longrightarrow> I + J - {#a#} = I + (J - {#a#})"
+  by (simp add: multiset_eq_iff Suc_le_eq)
+
+lemma mset_add [elim?]:
+  assumes "a \<in># A"
+  obtains B where "A = B + {#a#}"
+proof -
+  from assms have "A = (A - {#a#}) + {#a#}"
+    by simp
+  with that show thesis .
+qed
+
+lemma union_iff:
+  "a \<in># A + B \<longleftrightarrow> a \<in># A \<or> a \<in># B"
+  by auto
 
 
 subsubsection \<open>Equality of multisets\<close>
@@ -186,7 +319,7 @@
   by (auto simp add: multiset_eq_iff)
 
 lemma diff_single_trivial: "\<not> x \<in># M \<Longrightarrow> M - {#x#} = M"
-  by (auto simp add: multiset_eq_iff)
+  by (auto simp add: multiset_eq_iff not_in_iff)
 
 lemma diff_single_eq_union: "x \<in># M \<Longrightarrow> M - {#x#} = N \<longleftrightarrow> M = N + {#x#}"
   by auto
@@ -197,12 +330,13 @@
 lemma union_single_eq_member: "M + {#x#} = N \<Longrightarrow> x \<in># N"
   by auto
 
-lemma union_is_single: "M + N = {#a#} \<longleftrightarrow> M = {#a#} \<and> N={#} \<or> M = {#} \<and> N = {#a#}"
+lemma union_is_single:
+  "M + N = {#a#} \<longleftrightarrow> M = {#a#} \<and> N = {#} \<or> M = {#} \<and> N = {#a#}"
   (is "?lhs = ?rhs")
 proof
   show ?lhs if ?rhs using that by auto
   show ?rhs if ?lhs
-    using that by (simp add: multiset_eq_iff split: if_splits) (metis add_is_1)
+    by (metis Multiset.diff_cancel add.commute add_diff_cancel_left' diff_add_zero diff_single_trivial insert_DiffM that)
 qed
 
 lemma single_is_union: "{#a#} = M + N \<longleftrightarrow> {#a#} = M \<and> N = {#} \<or> M = {#} \<and> {#a#} = N"
@@ -271,17 +405,15 @@
 definition subset_mset :: "'a multiset \<Rightarrow> 'a multiset \<Rightarrow> bool" (infix "\<subset>#" 50)
   where "A \<subset># B = (A \<subseteq># B \<and> A \<noteq> B)"
 
-abbreviation (input) supseteq_mset :: "'a multiset \<Rightarrow> 'a multiset \<Rightarrow> bool" where
-  "supseteq_mset A B == B \<subseteq># A"
-
-abbreviation (input) supset_mset :: "'a multiset \<Rightarrow> 'a multiset \<Rightarrow> bool" where
-  "supset_mset A B == B \<subset># A"
+abbreviation (input) supseteq_mset :: "'a multiset \<Rightarrow> 'a multiset \<Rightarrow> bool"  (infix "\<supseteq>#" 50)
+  where "supseteq_mset A B \<equiv> B \<subseteq># A"
+
+abbreviation (input) supset_mset :: "'a multiset \<Rightarrow> 'a multiset \<Rightarrow> bool"  (infix "\<supset>#" 50)
+  where "supset_mset A B \<equiv> B \<subset># A"
 
 notation (input)
   subseteq_mset  (infix "\<le>#" 50) and
-  supseteq_mset  (infix "\<ge>#" 50) and
-  supseteq_mset  (infix "\<supseteq>#" 50) and
-  supset_mset  (infix "\<supset>#" 50)
+  supseteq_mset  (infix "\<ge>#" 50)
 
 notation (ASCII)
   subseteq_mset  (infix "<=#" 50) and
@@ -291,11 +423,17 @@
 
 interpretation subset_mset: ordered_ab_semigroup_add_imp_le "op +" "op -" "op \<subseteq>#" "op \<subset>#"
   by standard (auto simp add: subset_mset_def subseteq_mset_def multiset_eq_iff intro: order_trans antisym)
-
-lemma mset_less_eqI: "(\<And>x. count A x \<le> count B x) \<Longrightarrow> A \<le># B"
+  -- \<open>FIXME: avoid junk stemming from type class interpretation\<close>
+
+lemma mset_less_eqI:
+  "(\<And>a. count A a \<le> count B a) \<Longrightarrow> A \<subseteq># B"
   by (simp add: subseteq_mset_def)
 
-lemma mset_le_exists_conv: "(A::'a multiset) \<le># B \<longleftrightarrow> (\<exists>C. B = A + C)"
+lemma mset_less_eq_count:
+  "A \<subseteq># B \<Longrightarrow> count A a \<le> count B a"
+  by (simp add: subseteq_mset_def)
+
+lemma mset_le_exists_conv: "(A::'a multiset) \<subseteq># B \<longleftrightarrow> (\<exists>C. B = A + C)"
   unfolding subseteq_mset_def
   apply (rule iffI)
    apply (rule exI [where x = "B - A"])
@@ -308,87 +446,113 @@
 declare subset_mset.zero_order[simp del]
   -- \<open>this removes some simp rules not in the usual order for multisets\<close>
 
-lemma mset_le_mono_add_right_cancel [simp]: "(A::'a multiset) + C \<le># B + C \<longleftrightarrow> A \<le># B"
-  by (fact subset_mset.add_le_cancel_right)
-
-lemma mset_le_mono_add_left_cancel [simp]: "C + (A::'a multiset) \<le># C + B \<longleftrightarrow> A \<le># B"
-  by (fact subset_mset.add_le_cancel_left)
-
-lemma mset_le_mono_add: "(A::'a multiset) \<le># B \<Longrightarrow> C \<le># D \<Longrightarrow> A + C \<le># B + D"
-  by (fact subset_mset.add_mono)
-
-lemma mset_le_add_left [simp]: "(A::'a multiset) \<le># A + B"
-  unfolding subseteq_mset_def by auto
-
-lemma mset_le_add_right [simp]: "B \<le># (A::'a multiset) + B"
-  unfolding subseteq_mset_def by auto
-
-lemma mset_le_single: "a \<in># B \<Longrightarrow> {#a#} \<le># B"
-  by (simp add: subseteq_mset_def)
-
+lemma mset_le_mono_add_right_cancel [simp]: "(A::'a multiset) + C \<subseteq># B + C \<longleftrightarrow> A \<subseteq># B"
+   by (fact subset_mset.add_le_cancel_right)
+ 
+lemma mset_le_mono_add_left_cancel [simp]: "C + (A::'a multiset) \<subseteq># C + B \<longleftrightarrow> A \<subseteq># B"
+   by (fact subset_mset.add_le_cancel_left)
+ 
+lemma mset_le_mono_add: "(A::'a multiset) \<subseteq># B \<Longrightarrow> C \<subseteq># D \<Longrightarrow> A + C \<subseteq># B + D"
+   by (fact subset_mset.add_mono)
+ 
+lemma mset_le_add_left [simp]: "(A::'a multiset) \<subseteq># A + B"
+   unfolding subseteq_mset_def by auto
+ 
+lemma mset_le_add_right [simp]: "B \<subseteq># (A::'a multiset) + B"
+   unfolding subseteq_mset_def by auto
+ 
+lemma single_subset_iff [simp]:
+  "{#a#} \<subseteq># M \<longleftrightarrow> a \<in># M"
+  by (auto simp add: subseteq_mset_def Suc_le_eq)
+
+lemma mset_le_single: "a \<in># B \<Longrightarrow> {#a#} \<subseteq># B"
+  by (simp add: subseteq_mset_def Suc_le_eq)
+ 
 lemma multiset_diff_union_assoc:
   fixes A B C D :: "'a multiset"
-  shows "C \<le># B \<Longrightarrow> A + B - C = A + (B - C)"
-  by (simp add: subset_mset.diff_add_assoc)
-
+  shows "C \<subseteq># B \<Longrightarrow> A + B - C = A + (B - C)"
+  by (fact subset_mset.diff_add_assoc)
+ 
 lemma mset_le_multiset_union_diff_commute:
   fixes A B C D :: "'a multiset"
-  shows "B \<le># A \<Longrightarrow> A - B + C = A + C - B"
-by (simp add: subset_mset.add_diff_assoc2)
-
-lemma diff_le_self[simp]: "(M::'a multiset) - N \<le># M"
-by(simp add: subseteq_mset_def)
-
-lemma mset_lessD: "A <# B \<Longrightarrow> x \<in># A \<Longrightarrow> x \<in># B"
-apply (clarsimp simp: subset_mset_def subseteq_mset_def)
-apply (erule allE [where x = x])
-apply auto
-done
-
-lemma mset_leD: "A \<le># B \<Longrightarrow> x \<in># A \<Longrightarrow> x \<in># B"
-apply (clarsimp simp: subset_mset_def subseteq_mset_def)
-apply (erule allE [where x = x])
-apply auto
-done
-
-lemma mset_less_insertD: "(A + {#x#} <# B) \<Longrightarrow> (x \<in># B \<and> A <# B)"
-apply (rule conjI)
- apply (simp add: mset_lessD)
-apply (clarsimp simp: subset_mset_def subseteq_mset_def)
-apply safe
- apply (erule_tac x = a in allE)
- apply (auto split: if_split_asm)
-done
-
-lemma mset_le_insertD: "(A + {#x#} \<le># B) \<Longrightarrow> (x \<in># B \<and> A \<le># B)"
+  shows "B \<subseteq># A \<Longrightarrow> A - B + C = A + C - B"
+  by (fact subset_mset.add_diff_assoc2)
+
+lemma diff_le_self[simp]:
+  "(M::'a multiset) - N \<subseteq># M"
+  by (simp add: subseteq_mset_def)
+
+lemma mset_leD:
+  assumes "A \<subseteq># B" and "x \<in># A"
+  shows "x \<in># B"
+proof -
+  from \<open>x \<in># A\<close> have "count A x > 0" by simp
+  also from \<open>A \<subseteq># B\<close> have "count A x \<le> count B x"
+    by (simp add: subseteq_mset_def)
+  finally show ?thesis by simp
+qed
+  
+lemma mset_lessD:
+  "A \<subset># B \<Longrightarrow> x \<in># A \<Longrightarrow> x \<in># B"
+  by (auto intro: mset_leD [of A])
+
+lemma set_mset_mono:
+  "A \<subseteq># B \<Longrightarrow> set_mset A \<subseteq> set_mset B"
+  by (metis mset_leD subsetI)
+
+lemma mset_le_insertD:
+  "A + {#x#} \<subseteq># B \<Longrightarrow> x \<in># B \<and> A \<subset># B"
 apply (rule conjI)
  apply (simp add: mset_leD)
-apply (force simp: subset_mset_def subseteq_mset_def split: if_split_asm)
+ apply (clarsimp simp: subset_mset_def subseteq_mset_def)
+ apply safe
+  apply (erule_tac x = a in allE)
+  apply (auto split: if_split_asm)
 done
 
-lemma mset_less_of_empty[simp]: "A <# {#} \<longleftrightarrow> False"
+lemma mset_less_insertD:
+  "A + {#x#} \<subset># B \<Longrightarrow> x \<in># B \<and> A \<subset># B"
+  by (rule mset_le_insertD) simp
+
+lemma mset_less_of_empty[simp]: "A \<subset># {#} \<longleftrightarrow> False"
   by (auto simp add: subseteq_mset_def subset_mset_def multiset_eq_iff)
 
-lemma empty_le[simp]: "{#} \<le># A"
-  unfolding mset_le_exists_conv by auto
-
-lemma le_empty[simp]: "(M \<le># {#}) = (M = {#})"
+lemma empty_le [simp]: "{#} \<subseteq># A"
   unfolding mset_le_exists_conv by auto
-
-lemma multi_psub_of_add_self[simp]: "A <# A + {#x#}"
+ 
+lemma insert_subset_eq_iff:
+  "{#a#} + A \<subseteq># B \<longleftrightarrow> a \<in># B \<and> A \<subseteq># B - {#a#}"
+  using le_diff_conv2 [of "Suc 0" "count B a" "count A a"]
+  apply (auto simp add: subseteq_mset_def not_in_iff Suc_le_eq)
+  apply (rule ccontr)
+  apply (auto simp add: not_in_iff)
+  done
+
+lemma insert_union_subset_iff:
+  "{#a#} + A \<subset># B \<longleftrightarrow> a \<in># B \<and> A \<subset># B - {#a#}"
+  by (auto simp add: insert_subset_eq_iff subset_mset_def insert_DiffM)
+
+lemma subset_eq_diff_conv:
+  "A - C \<subseteq># B \<longleftrightarrow> A \<subseteq># B + C"
+  by (simp add: subseteq_mset_def le_diff_conv)
+
+lemma le_empty [simp]: "M \<subseteq># {#} \<longleftrightarrow> M = {#}"
+  unfolding mset_le_exists_conv by auto
+
+lemma multi_psub_of_add_self[simp]: "A \<subset># A + {#x#}"
   by (auto simp: subset_mset_def subseteq_mset_def)
 
-lemma multi_psub_self[simp]: "(A::'a multiset) <# A = False"
+lemma multi_psub_self[simp]: "(A::'a multiset) \<subset># A = False"
   by simp
 
-lemma mset_less_add_bothsides: "N + {#x#} <# M + {#x#} \<Longrightarrow> N <# M"
+lemma mset_less_add_bothsides: "N + {#x#} \<subset># M + {#x#} \<Longrightarrow> N \<subset># M"
   by (fact subset_mset.add_less_imp_less_right)
 
-lemma mset_less_empty_nonempty: "{#} <# S \<longleftrightarrow> S \<noteq> {#}"
+lemma mset_less_empty_nonempty: "{#} \<subset># S \<longleftrightarrow> S \<noteq> {#}"
   by (fact subset_mset.zero_less_iff_neq_zero)
 
-lemma mset_less_diff_self: "c \<in># B \<Longrightarrow> B - {#c#} <# B"
-  by (auto simp: subset_mset_def subseteq_mset_def multiset_eq_iff)
+lemma mset_less_diff_self: "c \<in># B \<Longrightarrow> B - {#c#} \<subset># B"
+  by (auto simp: subset_mset_def elim: mset_add)
 
 
 subsubsection \<open>Intersection\<close>
@@ -396,20 +560,32 @@
 definition inf_subset_mset :: "'a multiset \<Rightarrow> 'a multiset \<Rightarrow> 'a multiset" (infixl "#\<inter>" 70) where
   multiset_inter_def: "inf_subset_mset A B = A - (A - B)"
 
-interpretation subset_mset: semilattice_inf inf_subset_mset "op \<le>#" "op <#"
+interpretation subset_mset: semilattice_inf inf_subset_mset "op \<subseteq>#" "op \<subset>#"
 proof -
   have [simp]: "m \<le> n \<Longrightarrow> m \<le> q \<Longrightarrow> m \<le> n - (n - q)" for m n q :: nat
     by arith
-  show "class.semilattice_inf op #\<inter> op \<le># op <#"
+  show "class.semilattice_inf op #\<inter> op \<subseteq># op \<subset>#"
     by standard (auto simp add: multiset_inter_def subseteq_mset_def)
 qed
-
+  -- \<open>FIXME: avoid junk stemming from type class interpretation\<close>
 
 lemma multiset_inter_count [simp]:
   fixes A B :: "'a multiset"
   shows "count (A #\<inter> B) x = min (count A x) (count B x)"
   by (simp add: multiset_inter_def)
 
+lemma set_mset_inter [simp]:
+  "set_mset (A #\<inter> B) = set_mset A \<inter> set_mset B"
+  by (simp only: set_eq_iff count_greater_zero_iff [symmetric] multiset_inter_count) simp
+
+lemma diff_intersect_left_idem [simp]:
+  "M - M #\<inter> N = M - N"
+  by (simp add: multiset_eq_iff min_def)
+
+lemma diff_intersect_right_idem [simp]:
+  "M - N #\<inter> M = M - N"
+  by (simp add: multiset_eq_iff min_def)
+
 lemma multiset_inter_single: "a \<noteq> b \<Longrightarrow> {#a#} #\<inter> {#b#} = {#}"
   by (rule multiset_eqI) auto
 
@@ -421,11 +597,37 @@
   from assms have "min (count B x) (count C x) = 0"
     by (auto simp add: multiset_eq_iff)
   then have "count B x = 0 \<or> count C x = 0"
-    by auto
+    unfolding min_def by (auto split: if_splits)
   then show "count (A + B - C) x = count (A - C + B) x"
     by auto
 qed
 
+lemma disjunct_not_in:
+  "A #\<inter> B = {#} \<longleftrightarrow> (\<forall>a. a \<notin># A \<or> a \<notin># B)" (is "?P \<longleftrightarrow> ?Q")
+proof
+  assume ?P
+  show ?Q
+  proof
+    fix a
+    from \<open>?P\<close> have "min (count A a) (count B a) = 0"
+      by (simp add: multiset_eq_iff)
+    then have "count A a = 0 \<or> count B a = 0"
+      by (cases "count A a \<le> count B a") (simp_all add: min_def)
+    then show "a \<notin># A \<or> a \<notin># B"
+      by (simp add: not_in_iff)
+  qed
+next
+  assume ?Q
+  show ?P
+  proof (rule multiset_eqI)
+    fix a
+    from \<open>?Q\<close> have "count A a = 0 \<or> count B a = 0"
+      by (auto simp add: not_in_iff)
+    then show "count (A #\<inter> B) a = count {#} a"
+      by auto
+  qed
+qed
+
 lemma empty_inter [simp]: "{#} #\<inter> M = {#}"
   by (simp add: multiset_eq_iff)
 
@@ -433,55 +635,123 @@
   by (simp add: multiset_eq_iff)
 
 lemma inter_add_left1: "\<not> x \<in># N \<Longrightarrow> (M + {#x#}) #\<inter> N = M #\<inter> N"
-  by (simp add: multiset_eq_iff)
+  by (simp add: multiset_eq_iff not_in_iff)
 
 lemma inter_add_left2: "x \<in># N \<Longrightarrow> (M + {#x#}) #\<inter> N = (M #\<inter> (N - {#x#})) + {#x#}"
-  by (simp add: multiset_eq_iff)
+  by (auto simp add: multiset_eq_iff elim: mset_add)
 
 lemma inter_add_right1: "\<not> x \<in># N \<Longrightarrow> N #\<inter> (M + {#x#}) = N #\<inter> M"
-  by (simp add: multiset_eq_iff)
+  by (simp add: multiset_eq_iff not_in_iff)
 
 lemma inter_add_right2: "x \<in># N \<Longrightarrow> N #\<inter> (M + {#x#}) = ((N - {#x#}) #\<inter> M) + {#x#}"
-  by (simp add: multiset_eq_iff)
+  by (auto simp add: multiset_eq_iff elim: mset_add)
+
+lemma disjunct_set_mset_diff:
+  assumes "M #\<inter> N = {#}"
+  shows "set_mset (M - N) = set_mset M"
+proof (rule set_eqI)
+  fix a
+  from assms have "a \<notin># M \<or> a \<notin># N"
+    by (simp add: disjunct_not_in)
+  then show "a \<in># M - N \<longleftrightarrow> a \<in># M"
+    by (auto dest: in_diffD) (simp add: in_diff_count not_in_iff)
+qed
+
+lemma at_most_one_mset_mset_diff:
+  assumes "a \<notin># M - {#a#}"
+  shows "set_mset (M - {#a#}) = set_mset M - {a}"
+  using assms by (auto simp add: not_in_iff in_diff_count set_eq_iff)
+
+lemma more_than_one_mset_mset_diff:
+  assumes "a \<in># M - {#a#}"
+  shows "set_mset (M - {#a#}) = set_mset M"
+proof (rule set_eqI)
+  fix b
+  have "Suc 0 < count M b \<Longrightarrow> count M b > 0" by arith
+  then show "b \<in># M - {#a#} \<longleftrightarrow> b \<in># M"
+    using assms by (auto simp add: in_diff_count)
+qed
+
+lemma inter_iff:
+  "a \<in># A #\<inter> B \<longleftrightarrow> a \<in># A \<and> a \<in># B"
+  by simp
+
+lemma inter_union_distrib_left:
+  "A #\<inter> B + C = (A + C) #\<inter> (B + C)"
+  by (simp add: multiset_eq_iff min_add_distrib_left)
+
+lemma inter_union_distrib_right:
+  "C + A #\<inter> B = (C + A) #\<inter> (C + B)"
+  using inter_union_distrib_left [of A B C] by (simp add: ac_simps)
+
+lemma inter_subset_eq_union:
+  "A #\<inter> B \<subseteq># A + B"
+  by (auto simp add: subseteq_mset_def)
 
 
 subsubsection \<open>Bounded union\<close>
 
 definition sup_subset_mset :: "'a multiset \<Rightarrow> 'a multiset \<Rightarrow> 'a multiset"(infixl "#\<union>" 70)
-  where "sup_subset_mset A B = A + (B - A)"
-
-interpretation subset_mset: semilattice_sup sup_subset_mset "op \<le>#" "op <#"
+  where "sup_subset_mset A B = A + (B - A)" -- \<open>FIXME irregular fact name\<close>
+
+interpretation subset_mset: semilattice_sup sup_subset_mset "op \<subseteq>#" "op \<subset>#"
 proof -
   have [simp]: "m \<le> n \<Longrightarrow> q \<le> n \<Longrightarrow> m + (q - m) \<le> n" for m n q :: nat
     by arith
-  show "class.semilattice_sup op #\<union> op \<le># op <#"
+  show "class.semilattice_sup op #\<union> op \<subseteq># op \<subset>#"
     by standard (auto simp add: sup_subset_mset_def subseteq_mset_def)
 qed
-
-lemma sup_subset_mset_count [simp]: "count (A #\<union> B) x = max (count A x) (count B x)"
+  -- \<open>FIXME: avoid junk stemming from type class interpretation\<close>
+
+lemma sup_subset_mset_count [simp]: -- \<open>FIXME irregular fact name\<close>
+  "count (A #\<union> B) x = max (count A x) (count B x)"
   by (simp add: sup_subset_mset_def)
 
+lemma set_mset_sup [simp]:
+  "set_mset (A #\<union> B) = set_mset A \<union> set_mset B"
+  by (simp only: set_eq_iff count_greater_zero_iff [symmetric] sup_subset_mset_count)
+    (auto simp add: not_in_iff elim: mset_add)
+
 lemma empty_sup [simp]: "{#} #\<union> M = M"
   by (simp add: multiset_eq_iff)
 
 lemma sup_empty [simp]: "M #\<union> {#} = M"
   by (simp add: multiset_eq_iff)
 
-lemma sup_add_left1: "\<not> x \<in># N \<Longrightarrow> (M + {#x#}) #\<union> N = (M #\<union> N) + {#x#}"
+lemma sup_union_left1: "\<not> x \<in># N \<Longrightarrow> (M + {#x#}) #\<union> N = (M #\<union> N) + {#x#}"
+  by (simp add: multiset_eq_iff not_in_iff)
+
+lemma sup_union_left2: "x \<in># N \<Longrightarrow> (M + {#x#}) #\<union> N = (M #\<union> (N - {#x#})) + {#x#}"
   by (simp add: multiset_eq_iff)
 
-lemma sup_add_left2: "x \<in># N \<Longrightarrow> (M + {#x#}) #\<union> N = (M #\<union> (N - {#x#})) + {#x#}"
+lemma sup_union_right1: "\<not> x \<in># N \<Longrightarrow> N #\<union> (M + {#x#}) = (N #\<union> M) + {#x#}"
+  by (simp add: multiset_eq_iff not_in_iff)
+
+lemma sup_union_right2: "x \<in># N \<Longrightarrow> N #\<union> (M + {#x#}) = ((N - {#x#}) #\<union> M) + {#x#}"
   by (simp add: multiset_eq_iff)
 
-lemma sup_add_right1: "\<not> x \<in># N \<Longrightarrow> N #\<union> (M + {#x#}) = (N #\<union> M) + {#x#}"
-  by (simp add: multiset_eq_iff)
-
-lemma sup_add_right2: "x \<in># N \<Longrightarrow> N #\<union> (M + {#x#}) = ((N - {#x#}) #\<union> M) + {#x#}"
-  by (simp add: multiset_eq_iff)
+lemma sup_union_distrib_left:
+  "A #\<union> B + C = (A + C) #\<union> (B + C)"
+  by (simp add: multiset_eq_iff max_add_distrib_left)
+
+lemma union_sup_distrib_right:
+  "C + A #\<union> B = (C + A) #\<union> (C + B)"
+  using sup_union_distrib_left [of A B C] by (simp add: ac_simps)
+
+lemma union_diff_inter_eq_sup:
+  "A + B - A #\<inter> B = A #\<union> B"
+  by (auto simp add: multiset_eq_iff)
+
+lemma union_diff_sup_eq_inter:
+  "A + B - A #\<union> B = A #\<inter> B"
+  by (auto simp add: multiset_eq_iff)
+
 
 subsubsection \<open>Subset is an order\<close>
+
 interpretation subset_mset: order "op \<le>#" "op <#" by unfold_locales auto
 
+
 subsubsection \<open>Filter (with comprehension syntax)\<close>
 
 text \<open>Multiset comprehension\<close>
@@ -490,9 +760,21 @@
 is "\<lambda>P M. \<lambda>x. if P x then M x else 0"
 by (rule filter_preserves_multiset)
 
-lemma count_filter_mset [simp]: "count (filter_mset P M) a = (if P a then count M a else 0)"
+syntax (ASCII)
+  "_MCollect" :: "pttrn \<Rightarrow> 'a multiset \<Rightarrow> bool \<Rightarrow> 'a multiset"    ("(1{# _ :# _./ _#})")
+syntax
+  "_MCollect" :: "pttrn \<Rightarrow> 'a multiset \<Rightarrow> bool \<Rightarrow> 'a multiset"    ("(1{# _ \<in># _./ _#})")
+translations
+  "{#x \<in># M. P#}" == "CONST filter_mset (\<lambda>x. P) M"
+
+lemma count_filter_mset [simp]:
+  "count (filter_mset P M) a = (if P a then count M a else 0)"
   by (simp add: filter_mset.rep_eq)
 
+lemma set_mset_filter [simp]:
+  "set_mset (filter_mset P M) = {a \<in> set_mset M. P a}"
+  by (simp only: set_eq_iff count_greater_zero_iff [symmetric] count_filter_mset) simp
+
 lemma filter_empty_mset [simp]: "filter_mset P {#} = {#}"
   by (rule multiset_eqI) simp
 
@@ -508,60 +790,44 @@
 lemma filter_inter_mset [simp]: "filter_mset P (M #\<inter> N) = filter_mset P M #\<inter> filter_mset P N"
   by (rule multiset_eqI) simp
 
-lemma multiset_filter_subset[simp]: "filter_mset f M \<le># M"
+lemma multiset_filter_subset[simp]: "filter_mset f M \<subseteq># M"
   by (simp add: mset_less_eqI)
 
 lemma multiset_filter_mono:
-  assumes "A \<le># B"
-  shows "filter_mset f A \<le># filter_mset f B"
+  assumes "A \<subseteq># B"
+  shows "filter_mset f A \<subseteq># filter_mset f B"
 proof -
   from assms[unfolded mset_le_exists_conv]
   obtain C where B: "B = A + C" by auto
   show ?thesis unfolding B by auto
 qed
 
-syntax (ASCII)
-  "_MCollect" :: "pttrn \<Rightarrow> 'a multiset \<Rightarrow> bool \<Rightarrow> 'a multiset"    ("(1{# _ :# _./ _#})")
-syntax
-  "_MCollect" :: "pttrn \<Rightarrow> 'a multiset \<Rightarrow> bool \<Rightarrow> 'a multiset"    ("(1{# _ \<in># _./ _#})")
-translations
-  "{#x \<in># M. P#}" == "CONST filter_mset (\<lambda>x. P) M"
-
-
-subsubsection \<open>Set of elements\<close>
-
-definition set_mset :: "'a multiset \<Rightarrow> 'a set"
-  where "set_mset M = {x. x \<in># M}"
-
-lemma set_mset_empty [simp]: "set_mset {#} = {}"
-by (simp add: set_mset_def)
-
-lemma set_mset_single [simp]: "set_mset {#b#} = {b}"
-by (simp add: set_mset_def)
-
-lemma set_mset_union [simp]: "set_mset (M + N) = set_mset M \<union> set_mset N"
-by (auto simp add: set_mset_def)
-
-lemma set_mset_eq_empty_iff [simp]: "(set_mset M = {}) = (M = {#})"
-by (auto simp add: set_mset_def multiset_eq_iff)
-
-lemma mem_set_mset_iff [simp]: "(x \<in> set_mset M) = (x \<in># M)"
-by (auto simp add: set_mset_def)
-
-lemma set_mset_filter [simp]: "set_mset {# x\<in>#M. P x #} = set_mset M \<inter> {x. P x}"
-by (auto simp add: set_mset_def)
-
-lemma finite_set_mset [iff]: "finite (set_mset M)"
-  using count [of M] by (simp add: multiset_def set_mset_def)
-
-lemma finite_Collect_mem [iff]: "finite {x. x \<in># M}"
-  unfolding set_mset_def[symmetric] by simp
-
-lemma set_mset_mono: "A \<le># B \<Longrightarrow> set_mset A \<subseteq> set_mset B"
-  by (metis mset_leD subsetI mem_set_mset_iff)
-
-lemma ball_set_mset_iff: "(\<forall>x \<in> set_mset M. P x) \<longleftrightarrow> (\<forall>x. x \<in># M \<longrightarrow> P x)"
-  by auto
+lemma filter_mset_eq_conv:
+  "filter_mset P M = N \<longleftrightarrow> N \<subseteq># M \<and> (\<forall>b\<in>#N. P b) \<and> (\<forall>a\<in>#M - N. \<not> P a)" (is "?P \<longleftrightarrow> ?Q")
+proof
+  assume ?P then show ?Q by auto (simp add: multiset_eq_iff in_diff_count)
+next
+  assume ?Q
+  then obtain Q where M: "M = N + Q"
+    by (auto simp add: mset_le_exists_conv)
+  then have MN: "M - N = Q" by simp
+  show ?P
+  proof (rule multiset_eqI)
+    fix a
+    from \<open>?Q\<close> MN have *: "\<not> P a \<Longrightarrow> a \<notin># N" "P a \<Longrightarrow> a \<notin># Q"
+      by auto
+    show "count (filter_mset P M) a = count N a"
+    proof (cases "a \<in># M")
+      case True
+      with * show ?thesis
+        by (simp add: not_in_iff M)
+    next
+      case False then have "count M a = 0"
+        by (simp add: not_in_iff)
+      with M show ?thesis by simp
+    qed 
+  qed
+qed
 
 
 subsubsection \<open>Size\<close>
@@ -602,10 +868,8 @@
 
 lemma setsum_wcount_Int:
   "finite A \<Longrightarrow> setsum (wcount f N) (A \<inter> set_mset N) = setsum (wcount f N) A"
-apply (induct rule: finite_induct)
- apply simp
-apply (simp add: Int_insert_left set_mset_def wcount_def)
-done
+  by (induct rule: finite_induct)
+    (simp_all add: Int_insert_left wcount_def count_eq_zero_iff)
 
 lemma size_multiset_union [simp]:
   "size_multiset f (M + N::'a multiset) = size_multiset f M + size_multiset f N"
@@ -617,8 +881,9 @@
 lemma size_union [simp]: "size (M + N::'a multiset) = size M + size N"
 by (auto simp add: size_multiset_overloaded_def)
 
-lemma size_multiset_eq_0_iff_empty [iff]: "(size_multiset f M = 0) = (M = {#})"
-by (auto simp add: size_multiset_eq multiset_eq_iff)
+lemma size_multiset_eq_0_iff_empty [iff]:
+  "size_multiset f M = 0 \<longleftrightarrow> M = {#}"
+  by (auto simp add: size_multiset_eq count_eq_zero_iff)
 
 lemma size_eq_0_iff_empty [iff]: "(size M = 0) = (M = {#})"
 by (auto simp add: size_multiset_overloaded_def)
@@ -644,7 +909,7 @@
 
 lemma size_mset_mono:
   fixes A B :: "'a multiset"
-  assumes "A \<le># B"
+  assumes "A \<subseteq># B"
   shows "size A \<le> size B"
 proof -
   from assms[unfolded mset_le_exists_conv]
@@ -656,9 +921,10 @@
 by (rule size_mset_mono[OF multiset_filter_subset])
 
 lemma size_Diff_submset:
-  "M \<le># M' \<Longrightarrow> size (M' - M) = size M' - size(M::'a multiset)"
+  "M \<subseteq># M' \<Longrightarrow> size (M' - M) = size M' - size(M::'a multiset)"
 by (metis add_diff_cancel_left' size_union mset_le_exists_conv)
 
+
 subsection \<open>Induction and case splits\<close>
 
 theorem multiset_induct [case_names empty add, induct type: multiset]:
@@ -691,7 +957,7 @@
 apply auto
 done
 
-lemma mset_less_size: "(A::'a multiset) <# B \<Longrightarrow> size A < size B"
+lemma mset_less_size: "(A::'a multiset) \<subset># B \<Longrightarrow> size A < size B"
 proof (induct A arbitrary: B)
   case (empty M)
   then have "M \<noteq> {#}" by (simp add: mset_less_empty_nonempty)
@@ -700,54 +966,55 @@
   then show ?case by simp
 next
   case (add S x T)
-  have IH: "\<And>B. S <# B \<Longrightarrow> size S < size B" by fact
-  have SxsubT: "S + {#x#} <# T" by fact
-  then have "x \<in># T" and "S <# T" by (auto dest: mset_less_insertD)
+  have IH: "\<And>B. S \<subset># B \<Longrightarrow> size S < size B" by fact
+  have SxsubT: "S + {#x#} \<subset># T" by fact
+  then have "x \<in># T" and "S \<subset># T"
+    by (auto dest: mset_less_insertD)
   then obtain T' where T: "T = T' + {#x#}"
     by (blast dest: multi_member_split)
-  then have "S <# T'" using SxsubT
+  then have "S \<subset># T'" using SxsubT
     by (blast intro: mset_less_add_bothsides)
   then have "size S < size T'" using IH by simp
   then show ?case using T by simp
 qed
 
-
 lemma size_1_singleton_mset: "size M = 1 \<Longrightarrow> \<exists>a. M = {#a#}"
 by (cases M) auto
 
+
 subsubsection \<open>Strong induction and subset induction for multisets\<close>
 
 text \<open>Well-foundedness of strict subset relation\<close>
 
-lemma wf_less_mset_rel: "wf {(M, N :: 'a multiset). M <# N}"
+lemma wf_less_mset_rel: "wf {(M, N :: 'a multiset). M \<subset># N}"
 apply (rule wf_measure [THEN wf_subset, where f1=size])
 apply (clarsimp simp: measure_def inv_image_def mset_less_size)
 done
 
 lemma full_multiset_induct [case_names less]:
-assumes ih: "\<And>B. \<forall>(A::'a multiset). A <# B \<longrightarrow> P A \<Longrightarrow> P B"
+assumes ih: "\<And>B. \<forall>(A::'a multiset). A \<subset># B \<longrightarrow> P A \<Longrightarrow> P B"
 shows "P B"
 apply (rule wf_less_mset_rel [THEN wf_induct])
 apply (rule ih, auto)
 done
 
 lemma multi_subset_induct [consumes 2, case_names empty add]:
-  assumes "F \<le># A"
+  assumes "F \<subseteq># A"
     and empty: "P {#}"
     and insert: "\<And>a F. a \<in># A \<Longrightarrow> P F \<Longrightarrow> P (F + {#a#})"
   shows "P F"
 proof -
-  from \<open>F \<le># A\<close>
+  from \<open>F \<subseteq># A\<close>
   show ?thesis
   proof (induct F)
     show "P {#}" by fact
   next
     fix x F
-    assume P: "F \<le># A \<Longrightarrow> P F" and i: "F + {#x#} \<le># A"
+    assume P: "F \<subseteq># A \<Longrightarrow> P F" and i: "F + {#x#} \<subseteq># A"
     show "P (F + {#x#})"
     proof (rule insert)
       from i show "x \<in># A" by (auto dest: mset_le_insertD)
-      from i have "F \<le># A" by (auto dest: mset_le_insertD)
+      from i have "F \<subseteq># A" by (auto dest: mset_le_insertD)
       with P show "P F" .
     qed
   qed
@@ -775,7 +1042,8 @@
   show ?thesis
   proof (cases "x \<in> set_mset M")
     case False
-    then have *: "count (M + {#x#}) x = 1" by simp
+    then have *: "count (M + {#x#}) x = 1"
+      by (simp add: not_in_iff)
     from False have "Finite_Set.fold (\<lambda>y. f y ^^ count (M + {#x#}) y) s (set_mset M) =
       Finite_Set.fold (\<lambda>y. f y ^^ count M y) s (set_mset M)"
       by (auto intro!: Finite_Set.fold_cong comp_fun_commute_funpow)
@@ -893,7 +1161,7 @@
 \<close>
 
 lemma in_image_mset: "y \<in># {#f x. x \<in># M#} \<longleftrightarrow> y \<in> f ` set_mset M"
-by (metis mem_set_mset_iff set_image_mset)
+by (metis set_image_mset)
 
 functor image_mset: image_mset
 proof -
@@ -949,8 +1217,8 @@
 lemma set_mset_mset[simp]: "set_mset (mset x) = set x"
 by (induct x) auto
 
-lemma mem_set_multiset_eq: "x \<in> set xs = (x \<in># mset xs)"
-by (induct xs) auto
+lemma set_mset_comp_mset [simp]: "set_mset \<circ> mset = set"
+  by (simp add: fun_eq_iff)
 
 lemma size_mset [simp]: "size (mset xs) = length xs"
   by (induct xs) simp_all
@@ -974,23 +1242,32 @@
 apply auto
 done
 
-lemma set_count_greater_0: "set x = {a. count (mset x) a > 0}"
-by (induct x) auto
-
 lemma distinct_count_atmost_1:
   "distinct x = (\<forall>a. count (mset x) a = (if a \<in> set x then 1 else 0))"
-  apply (induct x, simp, rule iffI, simp_all)
-  subgoal for a b
-    apply (rule conjI)
-    apply (simp_all add: set_mset_mset [symmetric] del: set_mset_mset)
-    apply (erule_tac x = a in allE, simp)
-    apply clarify
-    apply (erule_tac x = aa in allE, simp)
-    done
-  done
-
-lemma mset_eq_setD: "mset xs = mset ys \<Longrightarrow> set xs = set ys"
-by (rule) (auto simp add:multiset_eq_iff set_count_greater_0)
+proof (induct x)
+  case Nil then show ?case by simp
+next
+  case (Cons x xs) show ?case (is "?lhs \<longleftrightarrow> ?rhs")
+  proof
+    assume ?lhs then show ?rhs using Cons by simp
+  next
+    assume ?rhs then have "x \<notin> set xs"
+      by (simp split: if_splits)
+    moreover from \<open>?rhs\<close> have "(\<forall>a. count (mset xs) a =
+       (if a \<in> set xs then 1 else 0))"
+      by (auto split: if_splits simp add: count_eq_zero_iff)
+    ultimately show ?lhs using Cons by simp
+  qed
+qed
+
+lemma mset_eq_setD:
+  assumes "mset xs = mset ys"
+  shows "set xs = set ys"
+proof -
+  from assms have "set_mset (mset xs) = set_mset (mset ys)"
+    by simp
+  then show ?thesis by simp
+qed
 
 lemma set_eq_iff_mset_eq_distinct:
   "distinct x \<Longrightarrow> distinct y \<Longrightarrow>
@@ -1146,7 +1423,7 @@
   unfolding replicate_mset_def by (induct n) (auto intro: add.commute)
 
 lemma in_replicate_mset[simp]: "x \<in># replicate_mset n y \<longleftrightarrow> n > 0 \<and> x = y"
-  unfolding replicate_mset_def by (induct n) simp_all
+  unfolding replicate_mset_def by (induct n) auto
 
 lemma count_replicate_mset[simp]: "count (replicate_mset n x) y = (if y = x then n else 0)"
   unfolding replicate_mset_def by (induct n) simp_all
@@ -1157,7 +1434,7 @@
 lemma size_replicate_mset[simp]: "size (replicate_mset n M) = n"
   by (induct n, simp_all)
 
-lemma count_le_replicate_mset_le: "n \<le> count M x \<longleftrightarrow> replicate_mset n x \<le># M"
+lemma count_le_replicate_mset_le: "n \<le> count M x \<longleftrightarrow> replicate_mset n x \<subseteq># M"
   by (auto simp add: assms mset_less_eqI) (metis count_replicate_mset subseteq_mset_def)
 
 lemma filter_eq_replicate_mset: "{#y \<in># D. y = x#} = replicate_mset (count D x) x"
@@ -1237,7 +1514,7 @@
 
 lemma msetsum_diff:
   fixes M N :: "('a :: ordered_cancel_comm_monoid_diff) multiset"
-  shows "N \<le># M \<Longrightarrow> msetsum (M - N) = msetsum M - msetsum N"
+  shows "N \<subseteq># M \<Longrightarrow> msetsum (M - N) = msetsum M - msetsum N"
   by (metis add_diff_cancel_right' msetsum.union subset_mset.diff_add)
 
 lemma size_eq_msetsum: "size M = msetsum (image_mset (\<lambda>_. 1) M)"
@@ -1246,7 +1523,7 @@
 next
   case (add M x) then show ?case
     by (cases "x \<in> set_mset M")
-      (simp_all del: mem_set_mset_iff add: size_multiset_overloaded_eq setsum.distrib setsum.delta' insert_absorb, simp)
+      (simp_all add: size_multiset_overloaded_eq setsum.distrib setsum.delta' insert_absorb not_in_iff)
 qed
 
 syntax (ASCII)
@@ -1257,7 +1534,8 @@
   "\<Sum>i \<in># A. b" \<rightleftharpoons> "CONST msetsum (CONST image_mset (\<lambda>i. b) A)"
 
 abbreviation Union_mset :: "'a multiset multiset \<Rightarrow> 'a multiset"  ("\<Union>#_" [900] 900)
-  where "\<Union># MM \<equiv> msetsum MM"
+  where "\<Union># MM \<equiv> msetsum MM" -- \<open>FIXME ambiguous notation --
+    could likewise refer to @{text "\<Squnion>#"}\<close>
 
 lemma set_mset_Union_mset[simp]: "set_mset (\<Union># MM) = (\<Union>M \<in> set_mset MM. set_mset M)"
   by (induct MM) auto
@@ -1322,10 +1600,30 @@
   then show ?thesis by simp
 qed
 
-lemma (in semidom) msetprod_zero_iff:
-  "msetprod A = 0 \<longleftrightarrow> (\<exists>a\<in>set_mset A. a = 0)"
+lemma (in semidom) msetprod_zero_iff [iff]:
+  "msetprod A = 0 \<longleftrightarrow> 0 \<in># A"
   by (induct A) auto
 
+lemma (in semidom_divide) msetprod_diff:
+  assumes "B \<subseteq># A" and "0 \<notin># B"
+  shows "msetprod (A - B) = msetprod A div msetprod B"
+proof -
+  from assms obtain C where "A = B + C"
+    by (metis subset_mset.add_diff_inverse)
+  with assms show ?thesis by simp
+qed
+
+lemma (in semidom_divide) msetprod_minus:
+  assumes "a \<in># A" and "a \<noteq> 0"
+  shows "msetprod (A - {#a#}) = msetprod A div a"
+  using assms msetprod_diff [of "{#a#}" A]
+    by (auto simp add: single_subset_iff)
+
+lemma (in normalization_semidom) normalized_msetprodI:
+  assumes "\<And>a. a \<in># A \<Longrightarrow> normalize a = a"
+  shows "normalize (msetprod A) = msetprod A"
+  using assms by (induct A) (simp_all add: normalize_mult)
+
 
 subsection \<open>Alternative representations\<close>
 
@@ -1362,8 +1660,10 @@
     by (simp add: filter_remove1)
   with Cons.prems have "sort_key f xs = remove1 x ys"
     by (auto intro!: Cons.hyps simp add: sorted_map_remove1)
-  moreover from Cons.prems have "x \<in> set ys"
-    by (auto simp add: mem_set_multiset_eq intro!: ccontr)
+  moreover from Cons.prems have "x \<in># mset ys"
+    by auto
+  then have "x \<in> set ys"
+    by simp
   ultimately show ?case using Cons.prems by (simp add: insort_key_remove1)
 qed
 
@@ -1511,7 +1811,7 @@
 
 hide_const (open) part
 
-lemma mset_remdups_le: "mset (remdups xs) \<le># mset xs"
+lemma mset_remdups_le: "mset (remdups xs) \<subseteq># mset xs"
   by (induct xs) (auto intro: subset_mset.order_trans)
 
 lemma mset_update:
@@ -1554,6 +1854,16 @@
 definition mult :: "('a \<times> 'a) set \<Rightarrow> ('a multiset \<times> 'a multiset) set" where
   "mult r = (mult1 r)\<^sup>+"
 
+lemma mult1I:
+  assumes "M = M0 + {#a#}" and "N = M0 + K" and "\<And>b. b \<in># K \<Longrightarrow> (b, a) \<in> r"
+  shows "(N, M) \<in> mult1 r"
+  using assms unfolding mult1_def by blast
+
+lemma mult1E:
+  assumes "(N, M) \<in> mult1 r"
+  obtains a M0 K where "M = M0 + {#a#}" "N = M0 + K" "\<And>b. b \<in># K \<Longrightarrow> (b, a) \<in> r"
+  using assms unfolding mult1_def by blast
+
 lemma not_less_empty [iff]: "(M, {#}) \<notin> mult1 r"
 by (simp add: mult1_def)
 
@@ -1672,7 +1982,7 @@
   "trans r \<Longrightarrow> (M, N) \<in> mult r \<Longrightarrow>
     \<exists>I J K. N = I + J \<and> M = I + K \<and> J \<noteq> {#} \<and>
     (\<forall>k \<in> set_mset K. \<exists>j \<in> set_mset J. (k, j) \<in> r)"
-apply (unfold mult_def mult1_def set_mset_def)
+apply (unfold mult_def mult1_def)
 apply (erule converse_trancl_induct, clarify)
  apply (rule_tac x = M0 in exI, simp, clarify)
 apply (case_tac "a \<in># K")
@@ -1683,7 +1993,7 @@
  apply (drule_tac f = "\<lambda>M. M - {#a#}" and x="S + T" for S T in arg_cong)
  apply (simp add: diff_union_single_conv)
  apply (simp (no_asm_use) add: trans_def)
- apply blast
+ apply (metis (no_types, hide_lams) Multiset.diff_right_commute Un_iff diff_single_trivial multi_drop_mem_not_eq)
 apply (subgoal_tac "a \<in># I")
  apply (rule_tac x = "I - {#a#}" in exI)
  apply (rule_tac x = "J + {#a#}" in exI)
@@ -1694,10 +2004,10 @@
   apply (drule_tac f = "\<lambda>M. M - {#a#}" and x="S + T" for S T in arg_cong, simp)
   apply (simp add: multiset_eq_iff split: nat_diff_split)
  apply (simp (no_asm_use) add: trans_def)
+apply (subgoal_tac "a \<in># (M0 + {#a#})")
+ apply (simp_all add: not_in_iff)
  apply blast
-apply (subgoal_tac "a \<in># (M0 + {#a#})")
- apply simp
-apply (simp (no_asm))
+ apply (metis add.comm_neutral add_diff_cancel_right' count_eq_zero_iff diff_single_trivial multi_self_add_other_not_self plus_multiset.rep_eq)
 done
 
 lemma one_step_implies_mult_aux:
@@ -1711,7 +2021,7 @@
 apply (case_tac "J' = {#}")
  apply (simp add: mult_def)
  apply (rule r_into_trancl)
- apply (simp add: mult1_def set_mset_def, blast)
+ apply (simp add: mult1_def, blast)
 txt \<open>Now we know @{term "J' \<noteq> {#}"}.\<close>
 apply (cut_tac M = K and P = "\<lambda>x. (x, a) \<in> r" in multiset_partition)
 apply (erule_tac P = "\<forall>k \<in> set_mset K. P k" for P in rev_mp)
@@ -1725,7 +2035,7 @@
 apply (simp (no_asm_use) add: add.assoc [symmetric] mult_def)
 apply (erule trancl_trans)
 apply (rule r_into_trancl)
-apply (simp add: mult1_def set_mset_def)
+apply (simp add: mult1_def)
 apply (rule_tac x = a in exI)
 apply (rule_tac x = "I + J'" in exI)
 apply (simp add: ac_simps)
@@ -1739,6 +2049,17 @@
 
 subsubsection \<open>Partial-order properties\<close>
 
+lemma (in order) mult1_lessE:
+  assumes "(N, M) \<in> mult1 {(a, b). a < b}"
+  obtains a M0 K where "M = M0 + {#a#}" "N = M0 + K"
+    "a \<notin># K" "\<And>b. b \<in># K \<Longrightarrow> b < a"
+proof -
+  from assms obtain a M0 K where "M = M0 + {#a#}" "N = M0 + K"
+    "\<And>b. b \<in># K \<Longrightarrow> b < a" by (blast elim: mult1E)
+  moreover from this(3) [of a] have "a \<notin># K" by auto
+  ultimately show thesis by (auto intro: that)
+qed
+
 definition less_multiset :: "'a::order multiset \<Rightarrow> 'a multiset \<Rightarrow> bool"  (infix "#\<subset>#" 50)
   where "M' #\<subset># M \<longleftrightarrow> (M', M) \<in> mult {(x', x). x' < x}"
 
@@ -1774,7 +2095,7 @@
     unfolding less_multiset_def mult_def by (blast intro: trancl_trans)
   show "class.order (le_multiset :: 'a multiset \<Rightarrow> _) less_multiset"
     by standard (auto simp add: le_multiset_def irrefl dest: trans)
-qed
+qed -- \<open>FIXME avoid junk stemming from type class interpretation\<close>
 
 lemma mult_less_irrefl [elim!]:
   fixes M :: "'a::order multiset"
@@ -1989,7 +2310,7 @@
 lemma multi_union_self_other_eq: "(A::'a multiset) + X = A + Y \<Longrightarrow> X = Y"
   by (fact add_left_imp_eq)
 
-lemma mset_less_trans: "(M::'a multiset) <# K \<Longrightarrow> K <# N \<Longrightarrow> M <# N"
+lemma mset_less_trans: "(M::'a multiset) \<subset># K \<Longrightarrow> K \<subset># N \<Longrightarrow> M \<subset># N"
   by (fact subset_mset.less_trans)
 
 lemma multiset_inter_commute: "A #\<inter> B = B #\<inter> A"
@@ -2075,7 +2396,7 @@
     if x \<in> set ys then (remove1 x ys, x # zs) else (ys, zs)) xs (ys, zs))) =
       (mset xs #\<inter> mset ys) + mset zs"
     by (induct xs arbitrary: ys)
-      (auto simp add: mem_set_multiset_eq inter_add_right1 inter_add_right2 ac_simps)
+      (auto simp add: inter_add_right1 inter_add_right2 ac_simps)
   then show ?thesis by simp
 qed
 
@@ -2118,8 +2439,8 @@
      None \<Rightarrow> None
    | Some (ys1,_,ys2) \<Rightarrow> ms_lesseq_impl xs (ys1 @ ys2))"
 
-lemma ms_lesseq_impl: "(ms_lesseq_impl xs ys = None \<longleftrightarrow> \<not> mset xs \<le># mset ys) \<and>
-  (ms_lesseq_impl xs ys = Some True \<longleftrightarrow> mset xs <# mset ys) \<and>
+lemma ms_lesseq_impl: "(ms_lesseq_impl xs ys = None \<longleftrightarrow> \<not> mset xs \<subseteq># mset ys) \<and>
+  (ms_lesseq_impl xs ys = Some True \<longleftrightarrow> mset xs \<subset># mset ys) \<and>
   (ms_lesseq_impl xs ys = Some False \<longrightarrow> mset xs = mset ys)"
 proof (induct xs arbitrary: ys)
   case (Nil ys)
@@ -2131,13 +2452,13 @@
     case None
     hence x: "x \<notin> set ys" by (simp add: extract_None_iff)
     {
-      assume "mset (x # xs) \<le># mset ys"
+      assume "mset (x # xs) \<subseteq># mset ys"
       from set_mset_mono[OF this] x have False by simp
     } note nle = this
     moreover
     {
-      assume "mset (x # xs) <# mset ys"
-      hence "mset (x # xs) \<le># mset ys" by auto
+      assume "mset (x # xs) \<subset># mset ys"
+      hence "mset (x # xs) \<subseteq># mset ys" by auto
       from nle[OF this] have False .
     }
     ultimately show ?thesis using None by auto
@@ -2156,10 +2477,10 @@
   qed
 qed
 
-lemma [code]: "mset xs \<le># mset ys \<longleftrightarrow> ms_lesseq_impl xs ys \<noteq> None"
+lemma [code]: "mset xs \<subseteq># mset ys \<longleftrightarrow> ms_lesseq_impl xs ys \<noteq> None"
   using ms_lesseq_impl[of xs ys] by (cases "ms_lesseq_impl xs ys", auto)
 
-lemma [code]: "mset xs <# mset ys \<longleftrightarrow> ms_lesseq_impl xs ys = Some True"
+lemma [code]: "mset xs \<subset># mset ys \<longleftrightarrow> ms_lesseq_impl xs ys = Some True"
   using ms_lesseq_impl[of xs ys] by (cases "ms_lesseq_impl xs ys", auto)
 
 instantiation multiset :: (equal) equal
@@ -2344,8 +2665,7 @@
   show "image_mset (g \<circ> f) = image_mset g \<circ> image_mset f" for f g
     unfolding comp_def by (rule ext) (simp add: comp_def image_mset.compositionality)
   show "(\<And>z. z \<in> set_mset X \<Longrightarrow> f z = g z) \<Longrightarrow> image_mset f X = image_mset g X" for f g X
-    by (induct X) (simp_all (no_asm),
-      metis One_nat_def Un_iff count_single mem_set_mset_iff set_mset_union zero_less_Suc)
+    by (induct X) simp_all
   show "set_mset \<circ> image_mset f = op ` f \<circ> set_mset" for f
     by auto
   show "card_order natLeq"
@@ -2476,7 +2796,7 @@
 proof -
   obtain a where a: "a \<in># M" and fa: "f a = b"
     using multiset.set_map[of f M] unfolding assms
-    by (metis image_iff mem_set_mset_iff union_single_eq_member)
+    by (metis image_iff union_single_eq_member)
   then obtain M1 where M: "M = M1 + {#a#}" using multi_member_split by metis
   have "image_mset f M1 = N" using assms unfolding M fa[symmetric] by simp
   thus ?thesis using M fa by blast
--- a/src/HOL/Library/Multiset_Order.thy	Mon Feb 29 11:42:15 2016 +0000
+++ b/src/HOL/Library/Multiset_Order.thy	Mon Feb 29 15:13:11 2016 +0000
@@ -77,22 +77,29 @@
 definition less_multiset\<^sub>H\<^sub>O where
   "less_multiset\<^sub>H\<^sub>O M N \<longleftrightarrow> M \<noteq> N \<and> (\<forall>y. count N y < count M y \<longrightarrow> (\<exists>x. y < x \<and> count M x < count N x))"
 
-lemma mult_imp_less_multiset\<^sub>H\<^sub>O: "(M, N) \<in> mult {(x, y). x < y} \<Longrightarrow> less_multiset\<^sub>H\<^sub>O M N"
-proof (unfold mult_def less_multiset\<^sub>H\<^sub>O_def, induct rule: trancl_induct)
+lemma mult_imp_less_multiset\<^sub>H\<^sub>O:
+  "(M, N) \<in> mult {(x, y). x < y} \<Longrightarrow> less_multiset\<^sub>H\<^sub>O M N"
+proof (unfold mult_def, induct rule: trancl_induct)
   case (base P)
-  then show ?case unfolding mult1_def by force
+  then show ?case
+    by (auto elim!: mult1_lessE simp add: count_eq_zero_iff less_multiset\<^sub>H\<^sub>O_def split: if_splits dest!: Suc_lessD)
 next
   case (step N P)
+  from step(3) have "M \<noteq> N" and
+    **: "\<And>y. count N y < count M y \<Longrightarrow> (\<exists>x>y. count M x < count N x)"
+    by (simp_all add: less_multiset\<^sub>H\<^sub>O_def)
   from step(2) obtain M0 a K where
-    *: "P = M0 + {#a#}" "N = M0 + K" "\<And>b. b \<in># K \<Longrightarrow> b < a"
-    unfolding mult1_def by blast
-  then have count_K_a: "count K a = 0" by auto
-  with step(3) *(1,2) have "M \<noteq> P" by (force dest: *(3) split: if_splits)
+    *: "P = M0 + {#a#}" "N = M0 + K" "a \<notin># K" "\<And>b. b \<in># K \<Longrightarrow> b < a"
+    by (blast elim: mult1_lessE)
+  from \<open>M \<noteq> N\<close> ** *(1,2,3) have "M \<noteq> P" by (force dest: *(4) split: if_splits)
   moreover
   { assume "count P a \<le> count M a"
-    with count_K_a have "count N a < count M a" unfolding *(1,2) by auto
-      with step(3) obtain z where z: "z > a" "count M z < count N z" by blast
-      with * have "count N z \<le> count P z" by force
+    with \<open>a \<notin># K\<close> have "count N a < count M a" unfolding *(1,2)
+      by (auto simp add: not_in_iff)
+      with ** obtain z where z: "z > a" "count M z < count N z"
+        by blast
+      with * have "count N z \<le> count P z" 
+        by (force simp add: not_in_iff)
       with z have "\<exists>z > a. count M z < count P z" by auto
   } note count_a = this
   { fix y
@@ -106,27 +113,29 @@
       show ?thesis
       proof (cases "y \<in># K")
         case True
-        with *(3) have "y < a" by simp
+        with *(4) have "y < a" by simp
         then show ?thesis by (cases "count P a \<le> count M a") (auto dest: count_a intro: less_trans)
       next
         case False
-        with \<open>y \<noteq> a\<close> have "count P y = count N y" unfolding *(1,2) by simp
-        with count_y step(3) obtain z where z: "z > y" "count M z < count N z" by auto
+        with \<open>y \<noteq> a\<close> have "count P y = count N y" unfolding *(1,2)
+          by (simp add: not_in_iff)
+        with count_y ** obtain z where z: "z > y" "count M z < count N z" by auto
         show ?thesis
         proof (cases "z \<in># K")
           case True
-          with *(3) have "z < a" by simp
+          with *(4) have "z < a" by simp
           with z(1) show ?thesis
             by (cases "count P a \<le> count M a") (auto dest!: count_a intro: less_trans)
         next
           case False
-          with count_K_a have "count N z \<le> count P z" unfolding * by auto
+          with \<open>a \<notin># K\<close> have "count N z \<le> count P z" unfolding *
+            by (auto simp add: not_in_iff)
           with z show ?thesis by auto
         qed
       qed
     qed
   }
-  ultimately show ?case by blast
+  ultimately show ?case unfolding less_multiset\<^sub>H\<^sub>O_def by blast
 qed
 
 lemma less_multiset\<^sub>D\<^sub>M_imp_mult:
@@ -157,10 +166,12 @@
   proof (intro allI impI)
     fix k
     assume "k \<in># Y"
-    then have "count N k < count M k" unfolding Y_def by auto
+    then have "count N k < count M k" unfolding Y_def
+      by (auto simp add: in_diff_count)
     with \<open>less_multiset\<^sub>H\<^sub>O M N\<close> obtain a where "k < a" and "count M a < count N a"
       unfolding less_multiset\<^sub>H\<^sub>O_def by blast
-    then show "\<exists>a. a \<in># X \<and> k < a" unfolding X_def by auto
+    then show "\<exists>a. a \<in># X \<and> k < a" unfolding X_def
+      by (auto simp add: in_diff_count)
   qed
 qed
 
@@ -295,12 +306,13 @@
     add.commute)+
 
 lemma ex_gt_imp_less_multiset: "(\<exists>y :: 'a :: linorder. y \<in># N \<and> (\<forall>x. x \<in># M \<longrightarrow> x < y)) \<Longrightarrow> M #\<subset># N"
-  unfolding less_multiset\<^sub>H\<^sub>O by (metis less_irrefl less_nat_zero_code not_gr0)
-
+  unfolding less_multiset\<^sub>H\<^sub>O
+  by (metis count_eq_zero_iff count_greater_zero_iff less_le_not_le)
+  
 lemma ex_gt_count_imp_less_multiset:
   "(\<forall>y :: 'a :: linorder. y \<in># M + N \<longrightarrow> y \<le> x) \<Longrightarrow> count M x < count N x \<Longrightarrow> M #\<subset># N"
-  unfolding less_multiset\<^sub>H\<^sub>O by (metis add.left_neutral add_lessD1 dual_order.strict_iff_order
-    less_not_sym mset_leD mset_le_add_left)  
+  unfolding less_multiset\<^sub>H\<^sub>O
+  by (metis add_gr_0 count_union mem_Collect_eq not_gr0 not_le not_less_iff_gr_or_eq set_mset_def)
 
 lemma union_less_diff_plus: "P \<le># M \<Longrightarrow> N #\<subset># P \<Longrightarrow> M - P + N #\<subset># M"
   by (drule subset_mset.diff_add[symmetric]) (metis union_less_mono2)
--- a/src/HOL/Multivariate_Analysis/Cauchy_Integral_Thm.thy	Mon Feb 29 11:42:15 2016 +0000
+++ b/src/HOL/Multivariate_Analysis/Cauchy_Integral_Thm.thy	Mon Feb 29 15:13:11 2016 +0000
@@ -200,7 +200,7 @@
 text \<open>
 John Harrison writes as follows:
 
-``The usual assumption in complex analysis texts is that a path \<gamma> should be piecewise
+``The usual assumption in complex analysis texts is that a path \<open>\<gamma>\<close> should be piecewise
 continuously differentiable, which ensures that the path integral exists at least for any continuous
 f, since all piecewise continuous functions are integrable. However, our notion of validity is
 weaker, just piecewise differentiability... [namely] continuity plus differentiability except on a
--- a/src/HOL/Number_Theory/Cong.thy	Mon Feb 29 11:42:15 2016 +0000
+++ b/src/HOL/Number_Theory/Cong.thy	Mon Feb 29 15:13:11 2016 +0000
@@ -529,11 +529,11 @@
 
 lemma coprime_iff_invertible_nat:
   "m > 0 \<Longrightarrow> coprime a m = (EX x. [a * x = Suc 0] (mod m))"
-  by (metis One_nat_def cong_gcd_eq_nat cong_solve_coprime_nat coprime_lmult_nat gcd.commute gcd_Suc_0)
+  by (metis One_nat_def cong_gcd_eq_nat cong_solve_coprime_nat coprime_lmult gcd.commute gcd_Suc_0)
   
 lemma coprime_iff_invertible_int: "m > (0::int) \<Longrightarrow> coprime a m = (EX x. [a * x = 1] (mod m))"
   apply (auto intro: cong_solve_coprime_int)
-  apply (metis cong_int_def coprime_mul_eq_int gcd_1_int gcd.commute gcd_red_int)
+  apply (metis cong_int_def coprime_mul_eq gcd_1_int gcd.commute gcd_red_int)
   done
 
 lemma coprime_iff_invertible'_nat: "m > 0 \<Longrightarrow> coprime a m =
@@ -568,7 +568,7 @@
       [x = y] (mod (\<Prod>i\<in>A. m i))"
   apply (induct set: finite)
   apply auto
-  apply (metis One_nat_def coprime_cong_mult_nat gcd.commute setprod_coprime_nat)
+  apply (metis One_nat_def coprime_cong_mult_nat gcd.commute setprod_coprime)
   done
 
 lemma cong_cong_setprod_coprime_int [rule_format]: "finite A \<Longrightarrow>
@@ -577,7 +577,7 @@
       [x = y] (mod (\<Prod>i\<in>A. m i))"
   apply (induct set: finite)
   apply auto
-  apply (metis coprime_cong_mult_int gcd.commute setprod_coprime_int)
+  apply (metis coprime_cong_mult_int gcd.commute setprod_coprime)
   done
 
 lemma binary_chinese_remainder_aux_nat:
@@ -760,7 +760,7 @@
   fix i
   assume "i : A"
   with cop have "coprime (\<Prod>j \<in> A - {i}. m j) (m i)"
-    by (intro setprod_coprime_nat, auto)
+    by (intro setprod_coprime, auto)
   then have "EX x. [(\<Prod>j \<in> A - {i}. m j) * x = 1] (mod m i)"
     by (elim cong_solve_coprime_nat)
   then obtain x where "[(\<Prod>j \<in> A - {i}. m j) * x = 1] (mod m i)"
@@ -824,7 +824,7 @@
          [x = y] (mod (\<Prod>i\<in>A. m i))"
   apply (induct set: finite)
   apply auto
-  apply (metis One_nat_def coprime_cong_mult_nat gcd.commute setprod_coprime_nat)
+  apply (metis One_nat_def coprime_cong_mult_nat gcd.commute setprod_coprime)
   done
 
 lemma chinese_remainder_unique_nat:
--- a/src/HOL/Number_Theory/Euclidean_Algorithm.thy	Mon Feb 29 11:42:15 2016 +0000
+++ b/src/HOL/Number_Theory/Euclidean_Algorithm.thy	Mon Feb 29 15:13:11 2016 +0000
@@ -3,7 +3,7 @@
 section \<open>Abstract euclidean algorithm\<close>
 
 theory Euclidean_Algorithm
-imports Main "~~/src/HOL/GCD" "~~/src/HOL/Library/Polynomial"
+imports "~~/src/HOL/GCD" "~~/src/HOL/Library/Polynomial"
 begin
 
 text \<open>
@@ -99,6 +99,8 @@
 where
   "Gcd_eucl A = Lcm_eucl {d. \<forall>a\<in>A. d dvd a}"
 
+declare Lcm_eucl_def Gcd_eucl_def [code del]
+
 lemma gcd_eucl_0:
   "gcd_eucl a 0 = normalize a"
   by (simp add: gcd_eucl.simps [of a 0])
@@ -232,67 +234,95 @@
 class euclidean_ring = euclidean_semiring + idom
 begin
 
-function euclid_ext :: "'a \<Rightarrow> 'a \<Rightarrow> 'a \<times> 'a \<times> 'a" where
-  "euclid_ext a b = 
-     (if b = 0 then 
-        (1 div unit_factor a, 0, normalize a)
-      else
-        case euclid_ext b (a mod b) of
-            (s, t, c) \<Rightarrow> (t, s - t * (a div b), c))"
-  by pat_completeness simp
-termination
-  by (relation "measure (euclidean_size \<circ> snd)") (simp_all add: mod_size_less)
+subclass ring_div ..
+
+function euclid_ext_aux :: "'a \<Rightarrow> _" where
+  "euclid_ext_aux r' r s' s t' t = (
+     if r = 0 then let c = 1 div unit_factor r' in (s' * c, t' * c, normalize r')
+     else let q = r' div r
+          in  euclid_ext_aux r (r' mod r) s (s' - q * s) t (t' - q * t))"
+by auto
+termination by (relation "measure (\<lambda>(_,b,_,_,_,_). euclidean_size b)") (simp_all add: mod_size_less)
+
+declare euclid_ext_aux.simps [simp del]
 
-declare euclid_ext.simps [simp del]
+lemma euclid_ext_aux_correct:
+  assumes "gcd_eucl r' r = gcd_eucl x y"
+  assumes "s' * x + t' * y = r'"
+  assumes "s * x + t * y = r"
+  shows   "case euclid_ext_aux r' r s' s t' t of (a,b,c) \<Rightarrow>
+             a * x + b * y = c \<and> c = gcd_eucl x y" (is "?P (euclid_ext_aux r' r s' s t' t)")
+using assms
+proof (induction r' r s' s t' t rule: euclid_ext_aux.induct)
+  case (1 r' r s' s t' t)
+  show ?case
+  proof (cases "r = 0")
+    case True
+    hence "euclid_ext_aux r' r s' s t' t = 
+             (s' div unit_factor r', t' div unit_factor r', normalize r')"
+      by (subst euclid_ext_aux.simps) (simp add: Let_def)
+    also have "?P \<dots>"
+    proof safe
+      have "s' div unit_factor r' * x + t' div unit_factor r' * y = 
+                (s' * x + t' * y) div unit_factor r'"
+        by (cases "r' = 0") (simp_all add: unit_div_commute)
+      also have "s' * x + t' * y = r'" by fact
+      also have "\<dots> div unit_factor r' = normalize r'" by simp
+      finally show "s' div unit_factor r' * x + t' div unit_factor r' * y = normalize r'" .
+    next
+      from "1.prems" True show "normalize r' = gcd_eucl x y" by (simp add: gcd_eucl_0)
+    qed
+    finally show ?thesis .
+  next
+    case False
+    hence "euclid_ext_aux r' r s' s t' t = 
+             euclid_ext_aux r (r' mod r) s (s' - r' div r * s) t (t' - r' div r * t)"
+      by (subst euclid_ext_aux.simps) (simp add: Let_def)
+    also from "1.prems" False have "?P \<dots>"
+    proof (intro "1.IH")
+      have "(s' - r' div r * s) * x + (t' - r' div r * t) * y =
+              (s' * x + t' * y) - r' div r * (s * x + t * y)" by (simp add: algebra_simps)
+      also have "s' * x + t' * y = r'" by fact
+      also have "s * x + t * y = r" by fact
+      also have "r' - r' div r * r = r' mod r" using mod_div_equality[of r' r]
+        by (simp add: algebra_simps)
+      finally show "(s' - r' div r * s) * x + (t' - r' div r * t) * y = r' mod r" .
+    qed (auto simp: gcd_eucl_non_0 algebra_simps div_mod_equality')
+    finally show ?thesis .
+  qed
+qed
+
+definition euclid_ext where
+  "euclid_ext a b = euclid_ext_aux a b 1 0 0 1"
 
 lemma euclid_ext_0: 
   "euclid_ext a 0 = (1 div unit_factor a, 0, normalize a)"
-  by (simp add: euclid_ext.simps [of a 0])
+  by (simp add: euclid_ext_def euclid_ext_aux.simps)
 
 lemma euclid_ext_left_0: 
   "euclid_ext 0 a = (0, 1 div unit_factor a, normalize a)"
-  by (simp add: euclid_ext_0 euclid_ext.simps [of 0 a])
+  by (simp add: euclid_ext_def euclid_ext_aux.simps)
 
-lemma euclid_ext_non_0: 
-  "b \<noteq> 0 \<Longrightarrow> euclid_ext a b = (case euclid_ext b (a mod b) of
-    (s, t, c) \<Rightarrow> (t, s - t * (a div b), c))"
-  by (simp add: euclid_ext.simps [of a b] euclid_ext.simps [of b 0])
-
-lemma euclid_ext_code [code]:
-  "euclid_ext a b = (if b = 0 then (1 div unit_factor a, 0, normalize a)
-    else let (s, t, c) = euclid_ext b (a mod b) in  (t, s - t * (a div b), c))"
-  by (simp add: euclid_ext.simps [of a b] euclid_ext.simps [of b 0])
+lemma euclid_ext_correct':
+  "case euclid_ext x y of (a,b,c) \<Rightarrow> a * x + b * y = c \<and> c = gcd_eucl x y"
+  unfolding euclid_ext_def by (rule euclid_ext_aux_correct) simp_all
 
-lemma euclid_ext_correct:
-  "case euclid_ext a b of (s, t, c) \<Rightarrow> s * a + t * b = c"
-proof (induct a b rule: gcd_eucl_induct)
-  case (zero a) then show ?case
-    by (simp add: euclid_ext_0 ac_simps)
-next
-  case (mod a b)
-  obtain s t c where stc: "euclid_ext b (a mod b) = (s,t,c)"
-    by (cases "euclid_ext b (a mod b)") blast
-  with mod have "c = s * b + t * (a mod b)" by simp
-  also have "... = t * ((a div b) * b + a mod b) + (s - t * (a div b)) * b"
-    by (simp add: algebra_simps) 
-  also have "(a div b) * b + a mod b = a" using mod_div_equality .
-  finally show ?case
-    by (subst euclid_ext.simps) (simp add: stc mod ac_simps)
-qed
+lemma euclid_ext_gcd_eucl:
+  "(case euclid_ext x y of (a,b,c) \<Rightarrow> c) = gcd_eucl x y"
+  using euclid_ext_correct'[of x y] by (simp add: case_prod_unfold)
 
-definition euclid_ext' :: "'a \<Rightarrow> 'a \<Rightarrow> 'a \<times> 'a"
-where
-  "euclid_ext' a b = (case euclid_ext a b of (s, t, _) \<Rightarrow> (s, t))"
+definition euclid_ext' where
+  "euclid_ext' x y = (case euclid_ext x y of (a, b, _) \<Rightarrow> (a, b))"
+
+lemma euclid_ext'_correct':
+  "case euclid_ext' x y of (a,b) \<Rightarrow> a * x + b * y = gcd_eucl x y"
+  using euclid_ext_correct'[of x y] by (simp add: case_prod_unfold euclid_ext'_def)
 
 lemma euclid_ext'_0: "euclid_ext' a 0 = (1 div unit_factor a, 0)" 
   by (simp add: euclid_ext'_def euclid_ext_0)
 
 lemma euclid_ext'_left_0: "euclid_ext' 0 a = (0, 1 div unit_factor a)" 
   by (simp add: euclid_ext'_def euclid_ext_left_0)
-  
-lemma euclid_ext'_non_0: "b \<noteq> 0 \<Longrightarrow> euclid_ext' a b = (snd (euclid_ext' b (a mod b)),
-  fst (euclid_ext' b (a mod b)) - snd (euclid_ext' b (a mod b)) * (a div b))"
-  by (simp add: euclid_ext'_def euclid_ext_non_0 split_def)
 
 end
 
@@ -307,56 +337,14 @@
 subclass semiring_Gcd
   by standard (auto simp: Gcd_Gcd_eucl Lcm_Lcm_eucl Gcd_eucl_def intro: Lcm_eucl_least)
   
-
 lemma gcd_non_0:
   "b \<noteq> 0 \<Longrightarrow> gcd a b = gcd b (a mod b)"
   unfolding gcd_gcd_eucl by (fact gcd_eucl_non_0)
 
 lemmas gcd_0 = gcd_0_right
 lemmas dvd_gcd_iff = gcd_greatest_iff
-
 lemmas gcd_greatest_iff = dvd_gcd_iff
 
-lemma gcdI:
-  assumes "c dvd a" and "c dvd b" and greatest: "\<And>d. d dvd a \<Longrightarrow> d dvd b \<Longrightarrow> d dvd c"
-    and "normalize c = c"
-  shows "c = gcd a b"
-  by (rule associated_eqI) (auto simp: assms intro: gcd_greatest)
-
-lemma gcd_unique: "d dvd a \<and> d dvd b \<and> 
-    normalize d = d \<and>
-    (\<forall>e. e dvd a \<and> e dvd b \<longrightarrow> e dvd d) \<longleftrightarrow> d = gcd a b"
-  by rule (auto intro: gcdI simp: gcd_greatest)
-
-lemma gcd_dvd_prod: "gcd a b dvd k * b"
-  using mult_dvd_mono [of 1] by auto
-
-lemma gcd_proj2_if_dvd: 
-  "b dvd a \<Longrightarrow> gcd a b = normalize b"
-  by (cases "b = 0", simp_all add: dvd_eq_mod_eq_0 gcd_non_0)
-
-lemma gcd_proj1_if_dvd: 
-  "a dvd b \<Longrightarrow> gcd a b = normalize a"
-  by (subst gcd.commute, simp add: gcd_proj2_if_dvd)
-
-lemma gcd_proj1_iff: "gcd m n = normalize m \<longleftrightarrow> m dvd n"
-proof
-  assume A: "gcd m n = normalize m"
-  show "m dvd n"
-  proof (cases "m = 0")
-    assume [simp]: "m \<noteq> 0"
-    from A have B: "m = gcd m n * unit_factor m"
-      by (simp add: unit_eq_div2)
-    show ?thesis by (subst B, simp add: mult_unit_dvd_iff)
-  qed (insert A, simp)
-next
-  assume "m dvd n"
-  then show "gcd m n = normalize m" by (rule gcd_proj1_if_dvd)
-qed
-  
-lemma gcd_proj2_iff: "gcd m n = normalize n \<longleftrightarrow> n dvd m"
-  using gcd_proj1_iff [of n m] by (simp add: ac_simps)
-
 lemma gcd_mod1 [simp]:
   "gcd (a mod b) b = gcd a b"
   by (rule gcdI, metis dvd_mod_iff gcd_dvd1 gcd_dvd2, simp_all add: gcd_greatest dvd_mod_iff)
@@ -365,39 +353,6 @@
   "gcd a (b mod a) = gcd a b"
   by (rule gcdI, simp, metis dvd_mod_iff gcd_dvd1 gcd_dvd2, simp_all add: gcd_greatest dvd_mod_iff)
          
-lemma gcd_mult_distrib': 
-  "normalize c * gcd a b = gcd (c * a) (c * b)"
-proof (cases "c = 0")
-  case True then show ?thesis by simp_all
-next
-  case False then have [simp]: "is_unit (unit_factor c)" by simp
-  show ?thesis
-  proof (induct a b rule: gcd_eucl_induct)
-    case (zero a) show ?case
-    proof (cases "a = 0")
-      case True then show ?thesis by simp
-    next
-      case False
-      then show ?thesis by (simp add: normalize_mult)
-    qed
-    case (mod a b)
-    then show ?case by (simp add: mult_mod_right gcd.commute)
-  qed
-qed
-
-lemma gcd_mult_distrib:
-  "k * gcd a b = gcd (k * a) (k * b) * unit_factor k"
-proof-
-  have "normalize k * gcd a b = gcd (k * a) (k * b)"
-    by (simp add: gcd_mult_distrib')
-  then have "normalize k * gcd a b * unit_factor k = gcd (k * a) (k * b) * unit_factor k"
-    by simp
-  then have "normalize k * unit_factor k * gcd a b  = gcd (k * a) (k * b) * unit_factor k"
-    by (simp only: ac_simps)
-  then show ?thesis
-    by simp
-qed
-
 lemma euclidean_size_gcd_le1 [simp]:
   assumes "a \<noteq> 0"
   shows "euclidean_size (gcd a b) \<le> euclidean_size a"
@@ -429,408 +384,13 @@
   shows "euclidean_size (gcd a b) < euclidean_size b"
   using assms by (subst gcd.commute, rule euclidean_size_gcd_less1)
 
-lemma gcd_mult_unit1: "is_unit a \<Longrightarrow> gcd (b * a) c = gcd b c"
-  apply (rule gcdI)
-  apply simp_all
-  apply (rule dvd_trans, rule gcd_dvd1, simp add: unit_simps)
-  done
-
-lemma gcd_mult_unit2: "is_unit a \<Longrightarrow> gcd b (c * a) = gcd b c"
-  by (subst gcd.commute, subst gcd_mult_unit1, assumption, rule gcd.commute)
-
-lemma gcd_div_unit1: "is_unit a \<Longrightarrow> gcd (b div a) c = gcd b c"
-  by (erule is_unitE [of _ b]) (simp add: gcd_mult_unit1)
-
-lemma gcd_div_unit2: "is_unit a \<Longrightarrow> gcd b (c div a) = gcd b c"
-  by (erule is_unitE [of _ c]) (simp add: gcd_mult_unit2)
-
-lemma normalize_gcd_left [simp]:
-  "gcd (normalize a) b = gcd a b"
-proof (cases "a = 0")
-  case True then show ?thesis
-    by simp
-next
-  case False then have "is_unit (unit_factor a)"
-    by simp
-  moreover have "normalize a = a div unit_factor a"
-    by simp
-  ultimately show ?thesis
-    by (simp only: gcd_div_unit1)
-qed
-
-lemma normalize_gcd_right [simp]:
-  "gcd a (normalize b) = gcd a b"
-  using normalize_gcd_left [of b a] by (simp add: ac_simps)
-
-lemma gcd_idem: "gcd a a = normalize a"
-  by (cases "a = 0") (simp, rule sym, rule gcdI, simp_all)
-
-lemma gcd_right_idem: "gcd (gcd a b) b = gcd a b"
-  apply (rule gcdI)
-  apply (simp add: ac_simps)
-  apply (rule gcd_dvd2)
-  apply (rule gcd_greatest, erule (1) gcd_greatest, assumption)
-  apply simp
-  done
-
-lemma gcd_left_idem: "gcd a (gcd a b) = gcd a b"
-  apply (rule gcdI)
-  apply simp
-  apply (rule dvd_trans, rule gcd_dvd2, rule gcd_dvd2)
-  apply (rule gcd_greatest, assumption, erule gcd_greatest, assumption)
-  apply simp
-  done
-
-lemma comp_fun_idem_gcd: "comp_fun_idem gcd"
-proof
-  fix a b show "gcd a \<circ> gcd b = gcd b \<circ> gcd a"
-    by (simp add: fun_eq_iff ac_simps)
-next
-  fix a show "gcd a \<circ> gcd a = gcd a"
-    by (simp add: fun_eq_iff gcd_left_idem)
-qed
-
-lemma gcd_dvd_antisym:
-  "gcd a b dvd gcd c d \<Longrightarrow> gcd c d dvd gcd a b \<Longrightarrow> gcd a b = gcd c d"
-proof (rule gcdI)
-  assume A: "gcd a b dvd gcd c d" and B: "gcd c d dvd gcd a b"
-  have "gcd c d dvd c" by simp
-  with A show "gcd a b dvd c" by (rule dvd_trans)
-  have "gcd c d dvd d" by simp
-  with A show "gcd a b dvd d" by (rule dvd_trans)
-  show "normalize (gcd a b) = gcd a b"
-    by simp
-  fix l assume "l dvd c" and "l dvd d"
-  hence "l dvd gcd c d" by (rule gcd_greatest)
-  from this and B show "l dvd gcd a b" by (rule dvd_trans)
-qed
-
-lemma coprime_crossproduct:
-  assumes [simp]: "gcd a d = 1" "gcd b c = 1"
-  shows "normalize (a * c) = normalize (b * d) \<longleftrightarrow> normalize a  = normalize b \<and> normalize c = normalize d"
-    (is "?lhs \<longleftrightarrow> ?rhs")
-proof
-  assume ?rhs
-  then have "a dvd b" "b dvd a" "c dvd d" "d dvd c" by (simp_all add: associated_iff_dvd)
-  then have "a * c dvd b * d" "b * d dvd a * c" by (fast intro: mult_dvd_mono)+
-  then show ?lhs by (simp add: associated_iff_dvd)
-next
-  assume ?lhs
-  then have dvd: "a * c dvd b * d" "b * d dvd a * c" by (simp_all add: associated_iff_dvd)
-  then have "a dvd b * d" by (metis dvd_mult_left) 
-  hence "a dvd b" by (simp add: coprime_dvd_mult_iff)
-  moreover from dvd have "b dvd a * c" by (metis dvd_mult_left) 
-  hence "b dvd a" by (simp add: coprime_dvd_mult_iff)
-  moreover from dvd have "c dvd d * b" 
-    by (auto dest: dvd_mult_right simp add: ac_simps)
-  hence "c dvd d" by (simp add: coprime_dvd_mult_iff gcd.commute)
-  moreover from dvd have "d dvd c * a"
-    by (auto dest: dvd_mult_right simp add: ac_simps)
-  hence "d dvd c" by (simp add: coprime_dvd_mult_iff gcd.commute)
-  ultimately show ?rhs by (simp add: associated_iff_dvd)
-qed
-
-lemma gcd_add1 [simp]:
-  "gcd (m + n) n = gcd m n"
-  by (cases "n = 0", simp_all add: gcd_non_0)
-
-lemma gcd_add2 [simp]:
-  "gcd m (m + n) = gcd m n"
-  using gcd_add1 [of n m] by (simp add: ac_simps)
-
-lemma gcd_add_mult:
-  "gcd m (k * m + n) = gcd m n"
-proof -
-  have "gcd m ((k * m + n) mod m) = gcd m (k * m + n)"
-    by (fact gcd_mod2)
-  then show ?thesis by simp 
-qed
-
-lemma coprimeI: "(\<And>l. \<lbrakk>l dvd a; l dvd b\<rbrakk> \<Longrightarrow> l dvd 1) \<Longrightarrow> gcd a b = 1"
-  by (rule sym, rule gcdI, simp_all)
-
-lemma coprime: "gcd a b = 1 \<longleftrightarrow> (\<forall>d. d dvd a \<and> d dvd b \<longleftrightarrow> is_unit d)"
-  by (auto intro: coprimeI gcd_greatest dvd_gcdD1 dvd_gcdD2)
-
-lemma div_gcd_coprime:
-  assumes nz: "a \<noteq> 0 \<or> b \<noteq> 0"
-  defines [simp]: "d \<equiv> gcd a b"
-  defines [simp]: "a' \<equiv> a div d" and [simp]: "b' \<equiv> b div d"
-  shows "gcd a' b' = 1"
-proof (rule coprimeI)
-  fix l assume "l dvd a'" "l dvd b'"
-  then obtain s t where "a' = l * s" "b' = l * t" unfolding dvd_def by blast
-  moreover have "a = a' * d" "b = b' * d" by simp_all
-  ultimately have "a = (l * d) * s" "b = (l * d) * t"
-    by (simp_all only: ac_simps)
-  hence "l*d dvd a" and "l*d dvd b" by (simp_all only: dvd_triv_left)
-  hence "l*d dvd d" by (simp add: gcd_greatest)
-  then obtain u where "d = l * d * u" ..
-  then have "d * (l * u) = d" by (simp add: ac_simps)
-  moreover from nz have "d \<noteq> 0" by simp
-  with div_mult_self1_is_id have "d * (l * u) div d = l * u" . 
-  ultimately have "1 = l * u"
-    using \<open>d \<noteq> 0\<close> by simp
-  then show "l dvd 1" ..
-qed
-
-lemma coprime_lmult:
-  assumes dab: "gcd d (a * b) = 1" 
-  shows "gcd d a = 1"
-proof (rule coprimeI)
-  fix l assume "l dvd d" and "l dvd a"
-  hence "l dvd a * b" by simp
-  with \<open>l dvd d\<close> and dab show "l dvd 1" by (auto intro: gcd_greatest)
-qed
-
-lemma coprime_rmult:
-  assumes dab: "gcd d (a * b) = 1"
-  shows "gcd d b = 1"
-proof (rule coprimeI)
-  fix l assume "l dvd d" and "l dvd b"
-  hence "l dvd a * b" by simp
-  with \<open>l dvd d\<close> and dab show "l dvd 1" by (auto intro: gcd_greatest)
-qed
-
-lemma coprime_mul_eq: "gcd d (a * b) = 1 \<longleftrightarrow> gcd d a = 1 \<and> gcd d b = 1"
-  using coprime_rmult[of d a b] coprime_lmult[of d a b] coprime_mult[of d a b] by blast
-
-lemma gcd_coprime:
-  assumes c: "gcd a b \<noteq> 0" and a: "a = a' * gcd a b" and b: "b = b' * gcd a b"
-  shows "gcd a' b' = 1"
-proof -
-  from c have "a \<noteq> 0 \<or> b \<noteq> 0" by simp
-  with div_gcd_coprime have "gcd (a div gcd a b) (b div gcd a b) = 1" .
-  also from assms have "a div gcd a b = a'" by (metis div_mult_self2_is_id)+
-  also from assms have "b div gcd a b = b'" by (metis div_mult_self2_is_id)+
-  finally show ?thesis .
-qed
-
-lemma coprime_power:
-  assumes "0 < n"
-  shows "gcd a (b ^ n) = 1 \<longleftrightarrow> gcd a b = 1"
-using assms proof (induct n)
-  case (Suc n) then show ?case
-    by (cases n) (simp_all add: coprime_mul_eq)
-qed simp
-
-lemma gcd_coprime_exists:
-  assumes nz: "gcd a b \<noteq> 0"
-  shows "\<exists>a' b'. a = a' * gcd a b \<and> b = b' * gcd a b \<and> gcd a' b' = 1"
-  apply (rule_tac x = "a div gcd a b" in exI)
-  apply (rule_tac x = "b div gcd a b" in exI)
-  apply (insert nz, auto intro: div_gcd_coprime)
-  done
-
-lemma coprime_exp:
-  "gcd d a = 1 \<Longrightarrow> gcd d (a^n) = 1"
-  by (induct n, simp_all add: coprime_mult)
-
-lemma gcd_exp:
-  "gcd (a ^ n) (b ^ n) = gcd a b ^ n"
-proof (cases "a = 0 \<and> b = 0")
-  case True
-  then show ?thesis by (cases n) simp_all
-next
-  case False
-  then have "1 = gcd ((a div gcd a b) ^ n) ((b div gcd a b) ^ n)"
-    using coprime_exp2[OF div_gcd_coprime[of a b], of n n, symmetric] by simp
-  then have "gcd a b ^ n = gcd a b ^ n * ..." by simp
-  also note gcd_mult_distrib
-  also have "unit_factor (gcd a b ^ n) = 1"
-    using False by (auto simp add: unit_factor_power unit_factor_gcd)
-  also have "(gcd a b)^n * (a div gcd a b)^n = a^n"
-    by (subst ac_simps, subst div_power, simp, rule dvd_div_mult_self, rule dvd_power_same, simp)
-  also have "(gcd a b)^n * (b div gcd a b)^n = b^n"
-    by (subst ac_simps, subst div_power, simp, rule dvd_div_mult_self, rule dvd_power_same, simp)
-  finally show ?thesis by simp
-qed
-
-lemma coprime_common_divisor: 
-  "gcd a b = 1 \<Longrightarrow> a dvd a \<Longrightarrow> a dvd b \<Longrightarrow> is_unit a"
-  apply (subgoal_tac "a dvd gcd a b")
-  apply simp
-  apply (erule (1) gcd_greatest)
-  done
-
-lemma division_decomp: 
-  assumes dc: "a dvd b * c"
-  shows "\<exists>b' c'. a = b' * c' \<and> b' dvd b \<and> c' dvd c"
-proof (cases "gcd a b = 0")
-  assume "gcd a b = 0"
-  hence "a = 0 \<and> b = 0" by simp
-  hence "a = 0 * c \<and> 0 dvd b \<and> c dvd c" by simp
-  then show ?thesis by blast
-next
-  let ?d = "gcd a b"
-  assume "?d \<noteq> 0"
-  from gcd_coprime_exists[OF this]
-    obtain a' b' where ab': "a = a' * ?d" "b = b' * ?d" "gcd a' b' = 1"
-    by blast
-  from ab'(1) have "a' dvd a" unfolding dvd_def by blast
-  with dc have "a' dvd b*c" using dvd_trans[of a' a "b*c"] by simp
-  from dc ab'(1,2) have "a'*?d dvd (b'*?d) * c" by simp
-  hence "?d * a' dvd ?d * (b' * c)" by (simp add: mult_ac)
-  with \<open>?d \<noteq> 0\<close> have "a' dvd b' * c" by simp
-  with coprime_dvd_mult[OF ab'(3)] 
-    have "a' dvd c" by (subst (asm) ac_simps, blast)
-  with ab'(1) have "a = ?d * a' \<and> ?d dvd b \<and> a' dvd c" by (simp add: mult_ac)
-  then show ?thesis by blast
-qed
-
-lemma pow_divs_pow:
-  assumes ab: "a ^ n dvd b ^ n" and n: "n \<noteq> 0"
-  shows "a dvd b"
-proof (cases "gcd a b = 0")
-  assume "gcd a b = 0"
-  then show ?thesis by simp
-next
-  let ?d = "gcd a b"
-  assume "?d \<noteq> 0"
-  from n obtain m where m: "n = Suc m" by (cases n, simp_all)
-  from \<open>?d \<noteq> 0\<close> have zn: "?d ^ n \<noteq> 0" by (rule power_not_zero)
-  from gcd_coprime_exists[OF \<open>?d \<noteq> 0\<close>]
-    obtain a' b' where ab': "a = a' * ?d" "b = b' * ?d" "gcd a' b' = 1"
-    by blast
-  from ab have "(a' * ?d) ^ n dvd (b' * ?d) ^ n"
-    by (simp add: ab'(1,2)[symmetric])
-  hence "?d^n * a'^n dvd ?d^n * b'^n"
-    by (simp only: power_mult_distrib ac_simps)
-  with zn have "a'^n dvd b'^n" by simp
-  hence "a' dvd b'^n" using dvd_trans[of a' "a'^n" "b'^n"] by (simp add: m)
-  hence "a' dvd b'^m * b'" by (simp add: m ac_simps)
-  with coprime_dvd_mult[OF coprime_exp[OF ab'(3), of m]]
-    have "a' dvd b'" by (subst (asm) ac_simps, blast)
-  hence "a'*?d dvd b'*?d" by (rule mult_dvd_mono, simp)
-  with ab'(1,2) show ?thesis by simp
-qed
-
-lemma pow_divs_eq [simp]:
-  "n \<noteq> 0 \<Longrightarrow> a ^ n dvd b ^ n \<longleftrightarrow> a dvd b"
-  by (auto intro: pow_divs_pow dvd_power_same)
-
-lemmas divs_mult = divides_mult
-
-lemma coprime_plus_one [simp]: "gcd (n + 1) n = 1"
-  by (subst add_commute, simp)
-
-lemma setprod_coprime [rule_format]:
-  "(\<forall>i\<in>A. gcd (f i) a = 1) \<longrightarrow> gcd (\<Prod>i\<in>A. f i) a = 1"
-  apply (cases "finite A")
-  apply (induct set: finite)
-  apply (auto simp add: gcd_mult_cancel)
-  done
-  
-lemma listprod_coprime:
-  "(\<And>x. x \<in> set xs \<Longrightarrow> coprime x y) \<Longrightarrow> coprime (listprod xs) y" 
-  by (induction xs) (simp_all add: gcd_mult_cancel)
-
-lemma coprime_divisors: 
-  assumes "d dvd a" "e dvd b" "gcd a b = 1"
-  shows "gcd d e = 1" 
-proof -
-  from assms obtain k l where "a = d * k" "b = e * l"
-    unfolding dvd_def by blast
-  with assms have "gcd (d * k) (e * l) = 1" by simp
-  hence "gcd (d * k) e = 1" by (rule coprime_lmult)
-  also have "gcd (d * k) e = gcd e (d * k)" by (simp add: ac_simps)
-  finally have "gcd e d = 1" by (rule coprime_lmult)
-  then show ?thesis by (simp add: ac_simps)
-qed
-
-lemma invertible_coprime:
-  assumes "a * b mod m = 1"
-  shows "coprime a m"
-proof -
-  from assms have "coprime m (a * b mod m)"
-    by simp
-  then have "coprime m (a * b)"
-    by simp
-  then have "coprime m a"
-    by (rule coprime_lmult)
-  then show ?thesis
-    by (simp add: ac_simps)
-qed
-
-lemma lcm_gcd_prod:
-  "lcm a b * gcd a b = normalize (a * b)"
-  by (simp add: lcm_gcd)
-
-lemma lcm_zero:
-  "lcm a b = 0 \<longleftrightarrow> a = 0 \<or> b = 0"
-  by (fact lcm_eq_0_iff)
-
-lemmas lcm_0_iff = lcm_zero
-
-lemma gcd_lcm: 
-  assumes "lcm a b \<noteq> 0"
-  shows "gcd a b = normalize (a * b) div lcm a b"
-proof -
-  have "lcm a b * gcd a b = normalize (a * b)"
-    by (fact lcm_gcd_prod)
-  with assms show ?thesis
-    by (metis nonzero_mult_divide_cancel_left)
-qed
-
-declare unit_factor_lcm [simp]
-
-lemma lcmI:
-  assumes "a dvd c" and "b dvd c" and "\<And>d. a dvd d \<Longrightarrow> b dvd d \<Longrightarrow> c dvd d"
-    and "normalize c = c"
-  shows "c = lcm a b"
-  by (rule associated_eqI) (auto simp: assms intro: lcm_least)
-
-lemma gcd_dvd_lcm [simp]:
-  "gcd a b dvd lcm a b"
-  using gcd_dvd2 by (rule dvd_lcmI2)
-
-lemmas lcm_0 = lcm_0_right
-
-lemma lcm_unique:
-  "a dvd d \<and> b dvd d \<and> 
-  normalize d = d \<and>
-  (\<forall>e. a dvd e \<and> b dvd e \<longrightarrow> d dvd e) \<longleftrightarrow> d = lcm a b"
-  by rule (auto intro: lcmI simp: lcm_least lcm_zero)
-
-lemma lcm_coprime:
-  "gcd a b = 1 \<Longrightarrow> lcm a b = normalize (a * b)"
-  by (subst lcm_gcd) simp
-
-lemma lcm_proj1_if_dvd: 
-  "b dvd a \<Longrightarrow> lcm a b = normalize a"
-  by (cases "a = 0") (simp, rule sym, rule lcmI, simp_all)
-
-lemma lcm_proj2_if_dvd: 
-  "a dvd b \<Longrightarrow> lcm a b = normalize b"
-  using lcm_proj1_if_dvd [of a b] by (simp add: ac_simps)
-
-lemma lcm_proj1_iff:
-  "lcm m n = normalize m \<longleftrightarrow> n dvd m"
-proof
-  assume A: "lcm m n = normalize m"
-  show "n dvd m"
-  proof (cases "m = 0")
-    assume [simp]: "m \<noteq> 0"
-    from A have B: "m = lcm m n * unit_factor m"
-      by (simp add: unit_eq_div2)
-    show ?thesis by (subst B, simp)
-  qed simp
-next
-  assume "n dvd m"
-  then show "lcm m n = normalize m" by (rule lcm_proj1_if_dvd)
-qed
-
-lemma lcm_proj2_iff:
-  "lcm m n = normalize n \<longleftrightarrow> m dvd n"
-  using lcm_proj1_iff [of n m] by (simp add: ac_simps)
-
 lemma euclidean_size_lcm_le1: 
   assumes "a \<noteq> 0" and "b \<noteq> 0"
   shows "euclidean_size a \<le> euclidean_size (lcm a b)"
 proof -
   have "a dvd lcm a b" by (rule dvd_lcm1)
   then obtain c where A: "lcm a b = a * c" ..
-  with \<open>a \<noteq> 0\<close> and \<open>b \<noteq> 0\<close> have "c \<noteq> 0" by (auto simp: lcm_zero)
+  with \<open>a \<noteq> 0\<close> and \<open>b \<noteq> 0\<close> have "c \<noteq> 0" by (auto simp: lcm_eq_0_iff)
   then show ?thesis by (subst A, intro size_mult_mono)
 qed
 
@@ -847,7 +407,7 @@
   with \<open>a \<noteq> 0\<close> and \<open>b \<noteq> 0\<close> have "euclidean_size (lcm a b) = euclidean_size a"
     by (intro le_antisym, simp, intro euclidean_size_lcm_le1)
   with assms have "lcm a b dvd a" 
-    by (rule_tac dvd_euclidean_size_eq_imp_dvd) (auto simp: lcm_zero)
+    by (rule_tac dvd_euclidean_size_eq_imp_dvd) (auto simp: lcm_eq_0_iff)
   hence "b dvd a" by (rule lcm_dvdD2)
   with \<open>\<not>b dvd a\<close> show False by contradiction
 qed
@@ -857,186 +417,13 @@
   shows "euclidean_size b < euclidean_size (lcm a b)"
   using assms euclidean_size_lcm_less1 [of a b] by (simp add: ac_simps)
 
-lemma lcm_mult_unit1:
-  "is_unit a \<Longrightarrow> lcm (b * a) c = lcm b c"
-  by (rule associated_eqI) (simp_all add: mult_unit_dvd_iff dvd_lcmI1)
-
-lemma lcm_mult_unit2:
-  "is_unit a \<Longrightarrow> lcm b (c * a) = lcm b c"
-  using lcm_mult_unit1 [of a c b] by (simp add: ac_simps)
-
-lemma lcm_div_unit1:
-  "is_unit a \<Longrightarrow> lcm (b div a) c = lcm b c"
-  by (erule is_unitE [of _ b]) (simp add: lcm_mult_unit1) 
-
-lemma lcm_div_unit2:
-  "is_unit a \<Longrightarrow> lcm b (c div a) = lcm b c"
-  by (erule is_unitE [of _ c]) (simp add: lcm_mult_unit2)
-
-lemma normalize_lcm_left [simp]:
-  "lcm (normalize a) b = lcm a b"
-proof (cases "a = 0")
-  case True then show ?thesis
-    by simp
-next
-  case False then have "is_unit (unit_factor a)"
-    by simp
-  moreover have "normalize a = a div unit_factor a"
-    by simp
-  ultimately show ?thesis
-    by (simp only: lcm_div_unit1)
-qed
-
-lemma normalize_lcm_right [simp]:
-  "lcm a (normalize b) = lcm a b"
-  using normalize_lcm_left [of b a] by (simp add: ac_simps)
-
-lemma LcmI:
-  assumes "\<And>a. a \<in> A \<Longrightarrow> a dvd b" and "\<And>c. (\<And>a. a \<in> A \<Longrightarrow> a dvd c) \<Longrightarrow> b dvd c"
-    and "normalize b = b" shows "b = Lcm A"
-  by (rule associated_eqI) (auto simp: assms dvd_Lcm intro: Lcm_least)
-
-lemma Lcm_subset:
-  "A \<subseteq> B \<Longrightarrow> Lcm A dvd Lcm B"
-  by (blast intro: Lcm_least dvd_Lcm)
-
-lemma Lcm_Un:
-  "Lcm (A \<union> B) = lcm (Lcm A) (Lcm B)"
-  apply (rule lcmI)
-  apply (blast intro: Lcm_subset)
-  apply (blast intro: Lcm_subset)
-  apply (intro Lcm_least ballI, elim UnE)
-  apply (rule dvd_trans, erule dvd_Lcm, assumption)
-  apply (rule dvd_trans, erule dvd_Lcm, assumption)
-  apply simp
-  done
-
-lemma Lcm_no_units:
-  "Lcm A = Lcm (A - {a. is_unit a})"
-proof -
-  have "(A - {a. is_unit a}) \<union> {a\<in>A. is_unit a} = A" by blast
-  hence "Lcm A = lcm (Lcm (A - {a. is_unit a})) (Lcm {a\<in>A. is_unit a})"
-    by (simp add: Lcm_Un [symmetric])
-  also have "Lcm {a\<in>A. is_unit a} = 1" by (simp add: Lcm_1_iff)
-  finally show ?thesis by simp
-qed
-
-lemma Lcm_0_iff':
-  "Lcm A = 0 \<longleftrightarrow> \<not>(\<exists>l. l \<noteq> 0 \<and> (\<forall>a\<in>A. a dvd l))"
-proof
-  assume "Lcm A = 0"
-  show "\<not>(\<exists>l. l \<noteq> 0 \<and> (\<forall>a\<in>A. a dvd l))"
-  proof
-    assume ex: "\<exists>l. l \<noteq> 0 \<and> (\<forall>a\<in>A. a dvd l)"
-    then obtain l\<^sub>0 where l\<^sub>0_props: "l\<^sub>0 \<noteq> 0 \<and> (\<forall>a\<in>A. a dvd l\<^sub>0)" by blast
-    def n \<equiv> "LEAST n. \<exists>l. l \<noteq> 0 \<and> (\<forall>a\<in>A. a dvd l) \<and> euclidean_size l = n"
-    def l \<equiv> "SOME l. l \<noteq> 0 \<and> (\<forall>a\<in>A. a dvd l) \<and> euclidean_size l = n"
-    have "\<exists>l. l \<noteq> 0 \<and> (\<forall>a\<in>A. a dvd l) \<and> euclidean_size l = n"
-      apply (subst n_def)
-      apply (rule LeastI[of _ "euclidean_size l\<^sub>0"])
-      apply (rule exI[of _ l\<^sub>0])
-      apply (simp add: l\<^sub>0_props)
-      done
-    from someI_ex[OF this] have "l \<noteq> 0" unfolding l_def by simp_all
-    hence "normalize l \<noteq> 0" by simp
-    also from ex have "normalize l = Lcm A"
-       by (simp only: Lcm_Lcm_eucl Lcm_eucl_def n_def l_def if_True Let_def)
-    finally show False using \<open>Lcm A = 0\<close> by contradiction
-  qed
-qed (simp only: Lcm_Lcm_eucl Lcm_eucl_def if_False)
+lemma Lcm_eucl_set [code]:
+  "Lcm_eucl (set xs) = foldl lcm_eucl 1 xs"
+  by (simp add: Lcm_Lcm_eucl [symmetric] lcm_lcm_eucl Lcm_set)
 
-lemma Lcm_no_multiple:
-  "(\<forall>m. m \<noteq> 0 \<longrightarrow> (\<exists>a\<in>A. \<not>a dvd m)) \<Longrightarrow> Lcm A = 0"
-proof -
-  assume "\<forall>m. m \<noteq> 0 \<longrightarrow> (\<exists>a\<in>A. \<not>a dvd m)"
-  hence "\<not>(\<exists>l. l \<noteq> 0 \<and> (\<forall>a\<in>A. a dvd l))" by blast
-  then show "Lcm A = 0" by (simp only: Lcm_Lcm_eucl Lcm_eucl_def if_False)
-qed
-
-lemma Lcm_finite:
-  assumes "finite A"
-  shows "Lcm A = Finite_Set.fold lcm 1 A"
-  by (induct rule: finite.induct[OF \<open>finite A\<close>])
-    (simp_all add: comp_fun_idem.fold_insert_idem[OF comp_fun_idem_lcm])
-
-lemma Lcm_set [code_unfold]:
-  "Lcm (set xs) = fold lcm xs 1"
-  using comp_fun_idem.fold_set_fold[OF comp_fun_idem_lcm] Lcm_finite by (simp add: ac_simps)
-
-lemma Lcm_singleton [simp]:
-  "Lcm {a} = normalize a"
-  by simp
-
-lemma Lcm_2 [simp]:
-  "Lcm {a,b} = lcm a b"
-  by simp
-
-lemma Lcm_coprime:
-  assumes "finite A" and "A \<noteq> {}" 
-  assumes "\<And>a b. a \<in> A \<Longrightarrow> b \<in> A \<Longrightarrow> a \<noteq> b \<Longrightarrow> gcd a b = 1"
-  shows "Lcm A = normalize (\<Prod>A)"
-using assms proof (induct rule: finite_ne_induct)
-  case (insert a A)
-  have "Lcm (insert a A) = lcm a (Lcm A)" by simp
-  also from insert have "Lcm A = normalize (\<Prod>A)" by blast
-  also have "lcm a \<dots> = lcm a (\<Prod>A)" by (cases "\<Prod>A = 0") (simp_all add: lcm_div_unit2)
-  also from insert have "gcd a (\<Prod>A) = 1" by (subst gcd.commute, intro setprod_coprime) auto
-  with insert have "lcm a (\<Prod>A) = normalize (\<Prod>(insert a A))"
-    by (simp add: lcm_coprime)
-  finally show ?case .
-qed simp
-      
-lemma Lcm_coprime':
-  "card A \<noteq> 0 \<Longrightarrow> (\<And>a b. a \<in> A \<Longrightarrow> b \<in> A \<Longrightarrow> a \<noteq> b \<Longrightarrow> gcd a b = 1)
-    \<Longrightarrow> Lcm A = normalize (\<Prod>A)"
-  by (rule Lcm_coprime) (simp_all add: card_eq_0_iff)
-
-lemma unit_factor_Gcd [simp]: "unit_factor (Gcd A) = (if Gcd A = 0 then 0 else 1)"
-proof -
-  show "unit_factor (Gcd A) = (if Gcd A = 0 then 0 else 1)"
-    by (simp add: Gcd_Lcm unit_factor_Lcm)
-qed
-
-lemma GcdI:
-  assumes "\<And>a. a \<in> A \<Longrightarrow> b dvd a" and "\<And>c. (\<And>a. a \<in> A \<Longrightarrow> c dvd a) \<Longrightarrow> c dvd b"
-    and "normalize b = b"
-  shows "b = Gcd A"
-  by (rule associated_eqI) (auto simp: assms Gcd_dvd intro: Gcd_greatest)
-
-lemma Gcd_1:
-  "1 \<in> A \<Longrightarrow> Gcd A = 1"
-  by (auto intro!: Gcd_eq_1_I)
-
-lemma Gcd_finite:
-  assumes "finite A"
-  shows "Gcd A = Finite_Set.fold gcd 0 A"
-  by (induct rule: finite.induct[OF \<open>finite A\<close>])
-    (simp_all add: comp_fun_idem.fold_insert_idem[OF comp_fun_idem_gcd])
-
-lemma Gcd_set [code_unfold]:
-  "Gcd (set xs) = fold gcd xs 0"
-  using comp_fun_idem.fold_set_fold[OF comp_fun_idem_gcd] Gcd_finite by (simp add: ac_simps)
-
-lemma Gcd_singleton [simp]: "Gcd {a} = normalize a"
-  by simp
-
-lemma Gcd_2 [simp]: "Gcd {a,b} = gcd a b"
-  by simp
-
-
-definition pairwise_coprime where
-  "pairwise_coprime A = (\<forall>x y. x \<in> A \<and> y \<in> A \<and> x \<noteq> y \<longrightarrow> coprime x y)"
-
-lemma pairwise_coprimeI [intro?]:
-  "(\<And>x y. x \<in> A \<Longrightarrow> y \<in> A \<Longrightarrow> x \<noteq> y \<Longrightarrow> coprime x y) \<Longrightarrow> pairwise_coprime A"
-  by (simp add: pairwise_coprime_def)
-
-lemma pairwise_coprimeD:
-  "pairwise_coprime A \<Longrightarrow> x \<in> A \<Longrightarrow> y \<in> A \<Longrightarrow> x \<noteq> y \<Longrightarrow> coprime x y"
-  by (simp add: pairwise_coprime_def)
-
-lemma pairwise_coprime_subset: "pairwise_coprime A \<Longrightarrow> B \<subseteq> A \<Longrightarrow> pairwise_coprime B"
-  by (force simp: pairwise_coprime_def)
+lemma Gcd_eucl_set [code]:
+  "Gcd_eucl (set xs) = foldl gcd_eucl 0 xs"
+  by (simp add: Gcd_Gcd_eucl [symmetric] gcd_gcd_eucl Gcd_set)
 
 end
 
@@ -1053,67 +440,25 @@
 
 lemma euclid_ext_gcd [simp]:
   "(case euclid_ext a b of (_, _ , t) \<Rightarrow> t) = gcd a b"
-  by (induct a b rule: gcd_eucl_induct)
-    (simp_all add: euclid_ext_0 euclid_ext_non_0 ac_simps split: prod.split prod.split_asm)
+  using euclid_ext_correct'[of a b] by (simp add: case_prod_unfold Let_def gcd_gcd_eucl)
 
 lemma euclid_ext_gcd' [simp]:
   "euclid_ext a b = (r, s, t) \<Longrightarrow> t = gcd a b"
   by (insert euclid_ext_gcd[of a b], drule (1) subst, simp)
+
+lemma euclid_ext_correct:
+  "case euclid_ext x y of (a,b,c) \<Rightarrow> a * x + b * y = c \<and> c = gcd x y"
+  using euclid_ext_correct'[of x y]
+  by (simp add: gcd_gcd_eucl case_prod_unfold)
   
 lemma euclid_ext'_correct:
   "fst (euclid_ext' a b) * a + snd (euclid_ext' a b) * b = gcd a b"
-proof-
-  obtain s t c where "euclid_ext a b = (s,t,c)"
-    by (cases "euclid_ext a b", blast)
-  with euclid_ext_correct[of a b] euclid_ext_gcd[of a b]
-    show ?thesis unfolding euclid_ext'_def by simp
-qed
+  using euclid_ext_correct'[of a b]
+  by (simp add: gcd_gcd_eucl case_prod_unfold euclid_ext'_def)
 
 lemma bezout: "\<exists>s t. s * a + t * b = gcd a b"
   using euclid_ext'_correct by blast
 
-lemma gcd_neg1 [simp]:
-  "gcd (-a) b = gcd a b"
-  by (rule sym, rule gcdI, simp_all add: gcd_greatest)
-
-lemma gcd_neg2 [simp]:
-  "gcd a (-b) = gcd a b"
-  by (rule sym, rule gcdI, simp_all add: gcd_greatest)
-
-lemma gcd_neg_numeral_1 [simp]:
-  "gcd (- numeral n) a = gcd (numeral n) a"
-  by (fact gcd_neg1)
-
-lemma gcd_neg_numeral_2 [simp]:
-  "gcd a (- numeral n) = gcd a (numeral n)"
-  by (fact gcd_neg2)
-
-lemma gcd_diff1: "gcd (m - n) n = gcd m n"
-  by (subst diff_conv_add_uminus, subst gcd_neg2[symmetric],  subst gcd_add1, simp)
-
-lemma gcd_diff2: "gcd (n - m) n = gcd m n"
-  by (subst gcd_neg1[symmetric], simp only: minus_diff_eq gcd_diff1)
-
-lemma coprime_minus_one [simp]: "gcd (n - 1) n = 1"
-proof -
-  have "gcd (n - 1) n = gcd n (n - 1)" by (fact gcd.commute)
-  also have "\<dots> = gcd ((n - 1) + 1) (n - 1)" by simp
-  also have "\<dots> = 1" by (rule coprime_plus_one)
-  finally show ?thesis .
-qed
-
-lemma lcm_neg1 [simp]: "lcm (-a) b = lcm a b"
-  by (rule sym, rule lcmI, simp_all add: lcm_least lcm_zero)
-
-lemma lcm_neg2 [simp]: "lcm a (-b) = lcm a b"
-  by (rule sym, rule lcmI, simp_all add: lcm_least lcm_zero)
-
-lemma lcm_neg_numeral_1 [simp]: "lcm (- numeral n) a = lcm (numeral n) a"
-  by (fact lcm_neg1)
-
-lemma lcm_neg_numeral_2 [simp]: "lcm a (- numeral n) = lcm a (numeral n)"
-  by (fact lcm_neg2)
-
 end
 
 
--- a/src/HOL/Number_Theory/Fib.thy	Mon Feb 29 11:42:15 2016 +0000
+++ b/src/HOL/Number_Theory/Fib.thy	Mon Feb 29 15:13:11 2016 +0000
@@ -59,7 +59,7 @@
 lemma coprime_fib_Suc_nat: "coprime (fib (n::nat)) (fib (Suc n))"
   apply (induct n rule: fib.induct)
   apply auto
-  apply (metis gcd_add1_nat add.commute)
+  apply (metis gcd_add1 add.commute)
   done
 
 lemma gcd_fib_add: "gcd (fib m) (fib (n + m)) = gcd (fib m) (fib n)"
@@ -67,7 +67,7 @@
   apply (cases m)
   apply (auto simp add: fib_add)
   apply (metis gcd.commute mult.commute coprime_fib_Suc_nat
-    gcd_add_mult_nat gcd_mult_cancel gcd.commute)
+    gcd_add_mult gcd_mult_cancel gcd.commute)
   done
 
 lemma gcd_fib_diff: "m \<le> n \<Longrightarrow> gcd (fib m) (fib (n - m)) = gcd (fib m) (fib n)"
--- a/src/HOL/Number_Theory/Gauss.thy	Mon Feb 29 11:42:15 2016 +0000
+++ b/src/HOL/Number_Theory/Gauss.thy	Mon Feb 29 15:13:11 2016 +0000
@@ -205,7 +205,7 @@
   by (simp add: cong_altdef_int) (metis gcd.commute prime_imp_coprime_int)
 
 lemma A_prod_relprime: "gcd (setprod id A) p = 1"
-  by (metis id_def all_A_relprime setprod_coprime_int)
+  by (metis id_def all_A_relprime setprod_coprime)
 
 
 subsection \<open>Relationships Between Gauss Sets\<close>
--- a/src/HOL/Number_Theory/Pocklington.thy	Mon Feb 29 11:42:15 2016 +0000
+++ b/src/HOL/Number_Theory/Pocklington.thy	Mon Feb 29 15:13:11 2016 +0000
@@ -130,7 +130,7 @@
   have "coprime x a" "coprime x b"
     by (metis cong_gcd_eq_nat)+
   then have "coprime x (a*b)"
-    by (metis coprime_mul_eq_nat)
+    by (metis coprime_mul_eq)
   with x show ?thesis by blast
 qed
 
@@ -242,7 +242,7 @@
   from mod_less_divisor[of n 1] n01 have onen: "1 mod n = 1" by simp
   from lucas_coprime_lemma[OF n01(3) an1] cong_imp_coprime_nat an1
   have an: "coprime a n" "coprime (a^(n - 1)) n"
-    by (auto simp add: coprime_exp_nat gcd.commute)
+    by (auto simp add: coprime_exp gcd.commute)
   {assume H0: "\<exists>m. 0 < m \<and> m < n - 1 \<and> [a ^ m = 1] (mod n)" (is "EX m. ?P m")
     from H0[unfolded nat_exists_least_iff[of ?P]] obtain m where
       m: "0 < m" "m < n - 1" "[a ^ m = 1] (mod n)" "\<forall>k <m. \<not>?P k" by blast
@@ -251,7 +251,7 @@
       let ?y = "a^ ((n - 1) div m * m)"
       note mdeq = mod_div_equality[of "(n - 1)" m]
       have yn: "coprime ?y n"
-        by (metis an(1) coprime_exp_nat gcd.commute)
+        by (metis an(1) coprime_exp gcd.commute)
       have "?y mod n = (a^m)^((n - 1) div m) mod n"
         by (simp add: algebra_simps power_mult)
       also have "\<dots> = (a^m mod n)^((n - 1) div m) mod n"
@@ -417,9 +417,9 @@
     from na have an: "coprime a n"
       by (metis gcd.commute)
     have aen: "coprime (a^e) n"
-      by (metis coprime_exp_nat gcd.commute na)      
+      by (metis coprime_exp gcd.commute na)      
     have acn: "coprime (a^c) n"
-      by (metis coprime_exp_nat gcd.commute na) 
+      by (metis coprime_exp gcd.commute na) 
     have "[a^d = a^e] (mod n) \<longleftrightarrow> [a^(e + c) = a^(e + 0)] (mod n)"
       using c by simp
     also have "\<dots> \<longleftrightarrow> [a^e* a^c = a^e *a^0] (mod n)" by (simp add: power_add)
@@ -587,7 +587,7 @@
       by auto (metis One_nat_def Suc_pred an dvd_1_iff_1 gcd_greatest_iff lucas_coprime_lemma)} 
   hence cpa: "coprime p a" by auto
   have arp: "coprime (a^r) p"
-    by (metis coprime_exp_nat cpa gcd.commute) 
+    by (metis coprime_exp cpa gcd.commute) 
   from euler_theorem_nat[OF arp, simplified ord_divides] o phip
   have "q dvd (p - 1)" by simp
   then obtain d where d:"p - 1 = q * d" 
--- a/src/HOL/Number_Theory/Primes.thy	Mon Feb 29 11:42:15 2016 +0000
+++ b/src/HOL/Number_Theory/Primes.thy	Mon Feb 29 15:13:11 2016 +0000
@@ -152,11 +152,11 @@
 
 
 lemma prime_imp_power_coprime_nat: "prime p \<Longrightarrow> ~ p dvd a \<Longrightarrow> coprime a (p^m)"
-  by (metis coprime_exp_nat gcd.commute prime_imp_coprime_nat)
+  by (metis coprime_exp gcd.commute prime_imp_coprime_nat)
 
 lemma prime_imp_power_coprime_int:
   fixes a::int shows "prime p \<Longrightarrow> ~ p dvd a \<Longrightarrow> coprime a (p^m)"
-  by (metis coprime_exp_int gcd.commute prime_imp_coprime_int)
+  by (metis coprime_exp gcd.commute prime_imp_coprime_int)
 
 lemma primes_coprime_nat: "prime p \<Longrightarrow> prime q \<Longrightarrow> p \<noteq> q \<Longrightarrow> coprime p q"
   by (metis gcd_nat.absorb1 gcd_nat.absorb2 prime_imp_coprime_nat)
@@ -203,7 +203,7 @@
       with p have "coprime b p"
         by (subst gcd.commute, intro prime_imp_coprime_nat)
       then have pnb: "coprime (p^n) b"
-        by (subst gcd.commute, rule coprime_exp_nat)
+        by (subst gcd.commute, rule coprime_exp)
       from coprime_dvd_mult[OF pnb pab] have ?thesis by blast }
     moreover
     { assume pb: "p dvd b"
@@ -213,7 +213,7 @@
       with p have "coprime a p"
         by (subst gcd.commute, intro prime_imp_coprime_nat)
       then have pna: "coprime (p^n) a"
-        by (subst gcd.commute, rule coprime_exp_nat)
+        by (subst gcd.commute, rule coprime_exp)
       from coprime_dvd_mult[OF pna pnba] have ?thesis by blast }
     ultimately have ?thesis by blast }
   ultimately show ?thesis by blast
@@ -374,7 +374,7 @@
 lemma bezout_gcd_nat:
   fixes a::nat shows "\<exists>x y. a * x - b * y = gcd a b \<or> b * x - a * y = gcd a b"
   using bezout_nat[of a b]
-by (metis bezout_nat diff_add_inverse gcd_add_mult_nat gcd.commute
+by (metis bezout_nat diff_add_inverse gcd_add_mult gcd.commute
   gcd_nat.right_neutral mult_0)
 
 lemma gcd_bezout_sum_nat:
--- a/src/HOL/Number_Theory/UniqueFactorization.thy	Mon Feb 29 11:42:15 2016 +0000
+++ b/src/HOL/Number_Theory/UniqueFactorization.thy	Mon Feb 29 15:13:11 2016 +0000
@@ -93,13 +93,13 @@
   next
     case False
     then show ?thesis
-      by auto
+      by (auto simp add: not_in_iff)
   qed
   finally have "a ^ count M a dvd a ^ count N a * (\<Prod>i \<in> (set_mset N - {a}). i ^ count N i)" .
   moreover
   have "coprime (a ^ count M a) (\<Prod>i \<in> (set_mset N - {a}). i ^ count N i)"
     apply (subst gcd.commute)
-    apply (rule setprod_coprime_nat)
+    apply (rule setprod_coprime)
     apply (rule primes_imp_powers_coprime_nat)
     using assms True
     apply auto
@@ -111,7 +111,7 @@
 next
   case False
   then show ?thesis
-    by auto
+    by (auto simp add: not_in_iff)
 qed
 
 lemma multiset_prime_factorization_unique:
@@ -437,7 +437,7 @@
   apply (cases "n = 0")
   apply auto
   apply (frule multiset_prime_factorization)
-  apply (auto simp add: set_mset_def multiplicity_nat_def)
+  apply (auto simp add: multiplicity_nat_def count_eq_zero_iff)
   done
 
 lemma multiplicity_not_factor_nat [simp]:
--- a/src/HOL/UNITY/Comp/AllocBase.thy	Mon Feb 29 11:42:15 2016 +0000
+++ b/src/HOL/UNITY/Comp/AllocBase.thy	Mon Feb 29 15:13:11 2016 +0000
@@ -41,7 +41,7 @@
 lemma bag_of_append [simp]: "bag_of (l@l') = bag_of l + bag_of l'"
   by (induct l) (simp_all add: ac_simps)
 
-lemma subseteq_le_multiset: "A #<=# A + B"
+lemma subseteq_le_multiset: "A #\<subseteq># A + B"
 unfolding le_multiset_def apply (cases B; simp)
 apply (rule HOL.disjI1)
 apply (rule union_less_mono2[of "{#}" "_ + {#_#}" A, simplified])
--- a/src/HOL/UNITY/Follows.thy	Mon Feb 29 11:42:15 2016 +0000
+++ b/src/HOL/UNITY/Follows.thy	Mon Feb 29 15:13:11 2016 +0000
@@ -36,10 +36,17 @@
 lemma Follows_constant [iff]: "F \<in> (%s. c) Fols (%s. c)"
 by (simp add: Follows_def)
 
-lemma mono_Follows_o: "mono h ==> f Fols g \<subseteq> (h o f) Fols (h o g)"
-by (auto simp add: Follows_def mono_Increasing_o [THEN [2] rev_subsetD]
-                   mono_Always_o [THEN [2] rev_subsetD]
-                   mono_LeadsTo_o [THEN [2] rev_subsetD, THEN INT_D])
+lemma mono_Follows_o:
+  assumes "mono h"
+  shows "f Fols g \<subseteq> (h o f) Fols (h o g)"
+proof
+  fix x
+  assume "x \<in> f Fols g"
+  with assms show "x \<in> (h \<circ> f) Fols (h \<circ> g)"
+  by (auto simp add: Follows_def mono_Increasing_o [THEN [2] rev_subsetD]
+    mono_Always_o [THEN [2] rev_subsetD]
+    mono_LeadsTo_o [THEN [2] rev_subsetD, THEN INT_D])
+qed
 
 lemma mono_Follows_apply:
      "mono h ==> f Fols g \<subseteq> (%x. h (f x)) Fols (%x. h (g x))"
@@ -173,10 +180,10 @@
 begin
 
 definition less_multiset :: "'a::order multiset \<Rightarrow> 'a multiset \<Rightarrow> bool" where
-  "M' < M \<longleftrightarrow> M' #<# M"
+  "M' < M \<longleftrightarrow> M' #\<subset># M"
 
 definition less_eq_multiset :: "'a multiset \<Rightarrow> 'a multiset \<Rightarrow> bool" where
-   "(M'::'a multiset) \<le> M \<longleftrightarrow> M' #<=# M"
+   "(M'::'a multiset) \<le> M \<longleftrightarrow> M' #\<subseteq># M"
 
 instance
   by standard (auto simp add: less_eq_multiset_def less_multiset_def multiset_order.less_le_not_le add.commute multiset_order.add_right_mono)
--- a/src/HOL/ex/Quicksort.thy	Mon Feb 29 11:42:15 2016 +0000
+++ b/src/HOL/ex/Quicksort.thy	Mon Feb 29 15:13:11 2016 +0000
@@ -25,7 +25,11 @@
   by (induct xs rule: quicksort.induct) (simp_all add: ac_simps)
 
 lemma set_quicksort [simp]: "set (quicksort xs) = set xs"
-  by (simp add: set_count_greater_0)
+proof -
+  have "set_mset (mset (quicksort xs)) = set_mset (mset xs)"
+    by simp
+  then show ?thesis by (simp only: set_mset_mset)
+qed
 
 lemma sorted_quicksort: "sorted (quicksort xs)"
   by (induct xs rule: quicksort.induct) (auto simp add: sorted_Cons sorted_append not_le less_imp_le)
--- a/src/Pure/General/file.scala	Mon Feb 29 11:42:15 2016 +0000
+++ b/src/Pure/General/file.scala	Mon Feb 29 15:13:11 2016 +0000
@@ -10,7 +10,8 @@
 import java.io.{BufferedWriter, OutputStreamWriter, FileOutputStream, BufferedOutputStream,
   OutputStream, InputStream, FileInputStream, BufferedInputStream, BufferedReader,
   InputStreamReader, File => JFile, IOException}
-import java.nio.file.{StandardCopyOption, Files}
+import java.nio.file.{StandardCopyOption, Path => JPath, Files, SimpleFileVisitor, FileVisitResult}
+import java.nio.file.attribute.BasicFileAttributes
 import java.net.{URL, URLDecoder, MalformedURLException}
 import java.util.zip.{GZIPInputStream, GZIPOutputStream}
 import java.util.regex.Pattern
@@ -107,24 +108,29 @@
   def shell_path(file: JFile): String = shell_quote(standard_path(file))
 
 
-  /* directory content */
+  /* find files */
 
-  def read_dir(dir: Path): List[String] =
+  def find_files(start: JFile, pred: JFile => Boolean = _ => true): List[JFile] =
   {
-    if (!dir.is_dir) error("Bad directory: " + dir.toString)
-    val files = dir.file.listFiles
-    if (files == null) Nil
-    else files.toList.map(_.getName)
+    val result = new mutable.ListBuffer[JFile]
+
+    if (start.isFile && pred(start)) result += start
+    else if (start.isDirectory) {
+      Files.walkFileTree(start.toPath,
+        new SimpleFileVisitor[JPath] {
+          override def visitFile(path: JPath, attrs: BasicFileAttributes): FileVisitResult =
+          {
+            val file = path.toFile
+            if (pred(file)) result += file
+            FileVisitResult.CONTINUE
+          }
+        }
+      )
+    }
+
+    result.toList
   }
 
-  def find_files(dir: Path): Stream[Path] =
-    read_dir(dir).toStream.map(name =>
-      if (Path.is_wellformed(name)) {
-        val path = dir + Path.basic(name)
-        path #:: (if (path.is_dir) find_files(path) else Stream.empty)
-      }
-      else Stream.empty).flatten
-
 
   /* read */
 
@@ -190,13 +196,13 @@
   def write_backup(path: Path, text: CharSequence)
   {
     path.file renameTo path.backup.file
-    File.write(path, text)
+    write(path, text)
   }
 
   def write_backup2(path: Path, text: CharSequence)
   {
     path.file renameTo path.backup2.file
-    File.write(path, text)
+    write(path, text)
   }
 
 
--- a/src/Pure/General/properties.scala	Mon Feb 29 11:42:15 2016 +0000
+++ b/src/Pure/General/properties.scala	Mon Feb 29 15:13:11 2016 +0000
@@ -23,6 +23,8 @@
           case "false" => Some(false)
           case _ => None
         }
+      def parse(s: java.lang.String): scala.Boolean =
+        unapply(s) getOrElse error("Bad boolean: " + quote(s))
     }
 
     object Int
@@ -31,6 +33,8 @@
       def unapply(s: java.lang.String): Option[scala.Int] =
         try { Some(Integer.parseInt(s)) }
         catch { case _: NumberFormatException => None }
+      def parse(s: java.lang.String): scala.Int =
+        unapply(s) getOrElse error("Bad integer: " + quote(s))
     }
 
     object Long
@@ -39,6 +43,8 @@
       def unapply(s: java.lang.String): Option[scala.Long] =
         try { Some(java.lang.Long.parseLong(s)) }
         catch { case _: NumberFormatException => None }
+      def parse(s: java.lang.String): scala.Long =
+        unapply(s) getOrElse error("Bad integer: " + quote(s))
     }
 
     object Double
@@ -47,6 +53,8 @@
       def unapply(s: java.lang.String): Option[scala.Double] =
         try { Some(java.lang.Double.parseDouble(s)) }
         catch { case _: NumberFormatException => None }
+      def parse(s: java.lang.String): scala.Double =
+        unapply(s) getOrElse error("Bad real: " + quote(s))
     }
   }
 
--- a/src/Pure/Isar/outer_syntax.scala	Mon Feb 29 11:42:15 2016 +0000
+++ b/src/Pure/Isar/outer_syntax.scala	Mon Feb 29 15:13:11 2016 +0000
@@ -237,7 +237,7 @@
     val name = command.span.name
     name match {
       case Thy_Header.CHAPTER => Some(0)
-      case Thy_Header.SECTION | Thy_Header.HEADER => Some(1)
+      case Thy_Header.SECTION => Some(1)
       case Thy_Header.SUBSECTION => Some(2)
       case Thy_Header.SUBSUBSECTION => Some(3)
       case Thy_Header.PARAGRAPH => Some(4)
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/src/Pure/ML/ml_statistics.ML	Mon Feb 29 15:13:11 2016 +0000
@@ -0,0 +1,59 @@
+(*  Title:      Pure/ML/ml_statistics.ML
+    Author:     Makarius
+
+ML runtime statistics for Poly/ML 5.5.0 or later.
+*)
+
+signature ML_STATISTICS =
+sig
+  val get: unit -> Properties.T
+end;
+
+structure ML_Statistics: ML_STATISTICS =
+struct
+
+fun get () =
+  let
+    val
+     {gcFullGCs,
+      gcPartialGCs,
+      sizeAllocation,
+      sizeAllocationFree,
+      sizeHeap,
+      sizeHeapFreeLastFullGC,
+      sizeHeapFreeLastGC,
+      threadsInML,
+      threadsTotal,
+      threadsWaitCondVar,
+      threadsWaitIO,
+      threadsWaitMutex,
+      threadsWaitSignal,
+      timeGCSystem,
+      timeGCUser,
+      timeNonGCSystem,
+      timeNonGCUser,
+      userCounters} = PolyML.Statistics.getLocalStats ();
+    val user_counters =
+      Vector.foldri
+        (fn (i, j, res) => ("user_counter" ^ Markup.print_int i, Markup.print_int j) :: res)
+        [] userCounters;
+  in
+    [("full_GCs", Markup.print_int gcFullGCs),
+     ("partial_GCs", Markup.print_int gcPartialGCs),
+     ("size_allocation", Markup.print_int sizeAllocation),
+     ("size_allocation_free", Markup.print_int sizeAllocationFree),
+     ("size_heap", Markup.print_int sizeHeap),
+     ("size_heap_free_last_full_GC", Markup.print_int sizeHeapFreeLastFullGC),
+     ("size_heap_free_last_GC", Markup.print_int sizeHeapFreeLastGC),
+     ("threads_in_ML", Markup.print_int threadsInML),
+     ("threads_total", Markup.print_int threadsTotal),
+     ("threads_wait_condvar", Markup.print_int threadsWaitCondVar),
+     ("threads_wait_IO", Markup.print_int threadsWaitIO),
+     ("threads_wait_mutex", Markup.print_int threadsWaitMutex),
+     ("threads_wait_signal", Markup.print_int threadsWaitSignal),
+     ("time_CPU", Markup.print_real (Time.toReal timeNonGCSystem + Time.toReal timeNonGCUser)),
+     ("time_GC", Markup.print_real (Time.toReal timeGCSystem + Time.toReal timeGCUser))] @
+    user_counters
+  end;
+
+end;
--- a/src/Pure/ML/ml_statistics_polyml-5.5.0.ML	Mon Feb 29 11:42:15 2016 +0000
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,60 +0,0 @@
-(*  Title:      Pure/ML/ml_statistics_polyml-5.5.0.ML
-    Author:     Makarius
-
-ML runtime statistics for Poly/ML 5.5.0.
-*)
-
-signature ML_STATISTICS =
-sig
-  val get: unit -> Properties.T
-end;
-
-structure ML_Statistics: ML_STATISTICS =
-struct
-
-fun get () =
-  let
-    val
-     {gcFullGCs,
-      gcPartialGCs,
-      sizeAllocation,
-      sizeAllocationFree,
-      sizeHeap,
-      sizeHeapFreeLastFullGC,
-      sizeHeapFreeLastGC,
-      threadsInML,
-      threadsTotal,
-      threadsWaitCondVar,
-      threadsWaitIO,
-      threadsWaitMutex,
-      threadsWaitSignal,
-      timeGCSystem,
-      timeGCUser,
-      timeNonGCSystem,
-      timeNonGCUser,
-      userCounters} = PolyML.Statistics.getLocalStats ();
-    val user_counters =
-      Vector.foldri
-        (fn (i, j, res) => ("user_counter" ^ Markup.print_int i, Markup.print_int j) :: res)
-        [] userCounters;
-  in
-    [("full_GCs", Markup.print_int gcFullGCs),
-     ("partial_GCs", Markup.print_int gcPartialGCs),
-     ("size_allocation", Markup.print_int sizeAllocation),
-     ("size_allocation_free", Markup.print_int sizeAllocationFree),
-     ("size_heap", Markup.print_int sizeHeap),
-     ("size_heap_free_last_full_GC", Markup.print_int sizeHeapFreeLastFullGC),
-     ("size_heap_free_last_GC", Markup.print_int sizeHeapFreeLastGC),
-     ("threads_in_ML", Markup.print_int threadsInML),
-     ("threads_total", Markup.print_int threadsTotal),
-     ("threads_wait_condvar", Markup.print_int threadsWaitCondVar),
-     ("threads_wait_IO", Markup.print_int threadsWaitIO),
-     ("threads_wait_mutex", Markup.print_int threadsWaitMutex),
-     ("threads_wait_signal", Markup.print_int threadsWaitSignal),
-     ("time_CPU", Markup.print_real (Time.toReal timeNonGCSystem + Time.toReal timeNonGCUser)),
-     ("time_GC", Markup.print_real (Time.toReal timeGCSystem + Time.toReal timeGCUser))] @
-    user_counters
-  end;
-
-end;
-
--- a/src/Pure/RAW/ROOT_polyml-5.5.2.ML	Mon Feb 29 11:42:15 2016 +0000
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,23 +0,0 @@
-(*  Title:      Pure/RAW/ROOT_polyml-5.5.2.ML
-    Author:     Makarius
-
-Compatibility wrapper for Poly/ML 5.5.2.
-*)
-
-structure Thread =
-struct
-  open Thread;
-
-  structure Thread =
-  struct
-    open Thread;
-
-    fun numProcessors () =
-      (case Thread.numPhysicalProcessors () of
-        SOME n => n
-      | NONE => Thread.numProcessors ());
-  end;
-end;
-
-use "RAW/ROOT_polyml.ML";
-
--- a/src/Pure/RAW/ROOT_polyml.ML	Mon Feb 29 11:42:15 2016 +0000
+++ b/src/Pure/RAW/ROOT_polyml.ML	Mon Feb 29 15:13:11 2016 +0000
@@ -59,13 +59,9 @@
 
 use "RAW/exn.ML";
 
-fun print_exception_trace (_: exn -> string) (_: string -> unit) = PolyML.exception_trace;
-
-if ML_System.name = "polyml-5.5.1"
-  orelse ML_System.name = "polyml-5.5.2"
-  orelse ML_System.name = "polyml-5.6"
-then use "RAW/exn_trace_polyml-5.5.1.ML"
-else ();
+if ML_System.name = "polyml-5.6"
+then use "RAW/exn_trace.ML"
+else use "RAW/exn_trace_raw.ML";
 
 
 (* multithreading *)
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/src/Pure/RAW/exn_trace.ML	Mon Feb 29 15:13:11 2016 +0000
@@ -0,0 +1,15 @@
+(*  Title:      Pure/RAW/exn_trace.ML
+    Author:     Makarius
+
+Exception trace via ML output, for Poly/ML 5.5.1 or later.
+*)
+
+fun print_exception_trace exn_message output e =
+  PolyML.Exception.traceException
+    (e, fn (trace, exn) =>
+      let
+        val title = "Exception trace - " ^ exn_message exn;
+        val _ = output (String.concatWith "\n" (title :: trace));
+      in reraise exn end);
+
+PolyML.Compiler.reportExhaustiveHandlers := true;
--- a/src/Pure/RAW/exn_trace_polyml-5.5.1.ML	Mon Feb 29 11:42:15 2016 +0000
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,16 +0,0 @@
-(*  Title:      Pure/RAW/exn_trace_polyml-5.5.1.ML
-    Author:     Makarius
-
-Exception trace for Poly/ML 5.5.1 via ML output.
-*)
-
-fun print_exception_trace exn_message output e =
-  PolyML.Exception.traceException
-    (e, fn (trace, exn) =>
-      let
-        val title = "Exception trace - " ^ exn_message exn;
-        val _ = output (String.concatWith "\n" (title :: trace));
-      in reraise exn end);
-
-PolyML.Compiler.reportExhaustiveHandlers := true;
-
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/src/Pure/RAW/exn_trace_raw.ML	Mon Feb 29 15:13:11 2016 +0000
@@ -0,0 +1,8 @@
+(*  Title:      Pure/RAW/exn_trace_raw.ML
+    Author:     Makarius
+
+Raw exception trace for Poly/ML 5.3.0.
+*)
+
+fun print_exception_trace (_: exn -> string) (_: string -> unit) =
+  PolyML.exception_trace;
--- a/src/Pure/ROOT	Mon Feb 29 11:42:15 2016 +0000
+++ b/src/Pure/ROOT	Mon Feb 29 15:13:11 2016 +0000
@@ -3,12 +3,12 @@
 session RAW =
   theories
   files
-    "RAW/ROOT_polyml-5.5.2.ML"
     "RAW/ROOT_polyml-5.6.ML"
     "RAW/ROOT_polyml.ML"
     "RAW/compiler_polyml.ML"
     "RAW/exn.ML"
-    "RAW/exn_trace_polyml-5.5.1.ML"
+    "RAW/exn_trace.ML"
+    "RAW/exn_trace_raw.ML"
     "RAW/fixed_int_dummy.ML"
     "RAW/ml_compiler_parameters.ML"
     "RAW/ml_compiler_parameters_polyml-5.6.ML"
@@ -35,12 +35,12 @@
 session Pure =
   global_theories Pure
   files
-    "RAW/ROOT_polyml-5.5.2.ML"
     "RAW/ROOT_polyml-5.6.ML"
     "RAW/ROOT_polyml.ML"
     "RAW/compiler_polyml.ML"
     "RAW/exn.ML"
-    "RAW/exn_trace_polyml-5.5.1.ML"
+    "RAW/exn_trace.ML"
+    "RAW/exn_trace_raw.ML"
     "RAW/fixed_int_dummy.ML"
     "RAW/ml_compiler_parameters.ML"
     "RAW/ml_compiler_parameters_polyml-5.6.ML"
@@ -169,8 +169,8 @@
     "ML/ml_lex.ML"
     "ML/ml_options.ML"
     "ML/ml_parse.ML"
+    "ML/ml_statistics.ML"
     "ML/ml_statistics_dummy.ML"
-    "ML/ml_statistics_polyml-5.5.0.ML"
     "ML/ml_syntax.ML"
     "PIDE/active.ML"
     "PIDE/command.ML"
--- a/src/Pure/ROOT.ML	Mon Feb 29 11:42:15 2016 +0000
+++ b/src/Pure/ROOT.ML	Mon Feb 29 15:13:11 2016 +0000
@@ -96,11 +96,8 @@
 
 use "ML/exn_properties.ML";
 
-if ML_System.name = "polyml-5.5.0"
-  orelse ML_System.name = "polyml-5.5.1"
-  orelse ML_System.name = "polyml-5.5.2"
-  orelse ML_System.name = "polyml-5.6"
-then use "ML/ml_statistics_polyml-5.5.0.ML"
+if ML_System.name = "polyml-5.6"
+then use "ML/ml_statistics.ML"
 else use "ML/ml_statistics_dummy.ML";
 
 use "Concurrent/standard_thread.ML";
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/src/Pure/System/getopts.scala	Mon Feb 29 15:13:11 2016 +0000
@@ -0,0 +1,69 @@
+/*  Title:      Pure/System/getopts.scala
+    Author:     Makarius
+
+Support for command-line options as in GNU bash.
+*/
+
+package isabelle
+
+
+object Getopts
+{
+  def apply(usage_text: String, option_specs: (String, String => Unit)*): Getopts =
+  {
+    val options =
+      (Map.empty[Char, (Boolean, String => Unit)] /: option_specs) {
+        case (m, (s, f)) =>
+          val (a, entry) =
+            if (s.size == 1) (s(0), (false, f))
+            else if (s.size == 2 && s.endsWith(":")) (s(0), (true, f))
+            else error("Bad option specification: " + quote(s))
+          if (m.isDefinedAt(a)) error("Duplicate option specification: " + quote(a.toString))
+          else m + (a -> entry)
+      }
+    new Getopts(usage_text, options)
+  }
+}
+
+class Getopts private(usage_text: String, options: Map[Char, (Boolean, String => Unit)])
+{
+  def usage(): Nothing =
+  {
+    Console.println(usage_text)
+    sys.exit(1)
+  }
+
+  private def is_option(opt: Char): Boolean = options.isDefinedAt(opt)
+  private def is_option0(opt: Char): Boolean = is_option(opt) && !options(opt)._1
+  private def is_option1(opt: Char): Boolean = is_option(opt) && options(opt)._1
+  private def print_option(opt: Char): String = quote("-" + opt.toString)
+  private def option(opt: Char, opt_arg: List[Char]): Unit =
+    try { options(opt)._2.apply(opt_arg.mkString) }
+    catch {
+      case ERROR(msg) =>
+        cat_error(msg, "The error(s) above occurred in command-line option " + print_option(opt))
+    }
+
+  private def getopts(args: List[List[Char]]): List[List[Char]] =
+    args match {
+      case List('-', '-') :: rest_args => rest_args
+      case ('-' :: opt :: rest_opts) :: rest_args if is_option0(opt) && !rest_opts.isEmpty =>
+        option(opt, Nil); getopts(('-' :: rest_opts) :: rest_args)
+      case List('-', opt) :: rest_args if is_option0(opt) =>
+        option(opt, Nil); getopts(rest_args)
+      case ('-' :: opt :: opt_arg) :: rest_args if is_option1(opt) && !opt_arg.isEmpty =>
+        option(opt, opt_arg); getopts(rest_args)
+      case List('-', opt) :: opt_arg :: rest_args if is_option1(opt) =>
+        option(opt, opt_arg); getopts(rest_args)
+      case List(List('-', opt)) if is_option1(opt) =>
+        Output.error_message("Command-line option " + print_option(opt) + " requires an argument")
+        usage()
+      case ('-' :: opt :: _) :: _ if !is_option(opt) =>
+        if (opt != '?') Output.error_message("Illegal command-line option " + print_option(opt))
+        usage()
+      case _ => args
+  }
+
+  def apply(args: List[String]): List[String] = getopts(args.map(_.toList)).map(_.mkString)
+  def apply(args: Array[String]): List[String] = apply(args.toList)
+}
--- a/src/Pure/System/options.scala	Mon Feb 29 11:42:15 2016 +0000
+++ b/src/Pure/System/options.scala	Mon Feb 29 15:13:11 2016 +0000
@@ -145,21 +145,49 @@
   def main(args: Array[String])
   {
     Command_Line.tool0 {
-      args.toList match {
-        case get_option :: export_file :: more_options =>
-          val options = (Options.init() /: more_options)(_ + _)
+      var build_options = false
+      var get_option = ""
+      var list_options = false
+      var export_file = ""
+
+      val getopts = Getopts("""
+Usage: isabelle options [OPTIONS] [MORE_OPTIONS ...]
 
-          if (get_option != "")
-            Console.println(options.check_name(get_option).value)
+  Options are:
+    -b           include $ISABELLE_BUILD_OPTIONS
+    -g OPTION    get value of OPTION
+    -l           list options
+    -x FILE      export options to FILE in YXML format
+
+  Report Isabelle system options, augmented by MORE_OPTIONS given as
+  arguments NAME=VAL or NAME.
+""",
+        "b" -> (_ => build_options = true),
+        "g:" -> (arg => get_option = arg),
+        "l" -> (_ => list_options = true),
+        "x:" -> (arg => export_file = arg))
 
-          if (export_file != "")
-            File.write(Path.explode(export_file), YXML.string_of_body(options.encode))
+      val more_options = getopts(args)
+      if (get_option == "" && !list_options && export_file == "") getopts.usage()
 
-          if (get_option == "" && export_file == "")
-            Console.println(options.print)
+      val options =
+      {
+        val options0 = Options.init()
+        val options1 =
+          if (build_options)
+            (options0 /: Word.explode(Isabelle_System.getenv("ISABELLE_BUILD_OPTIONS")))(_ + _)
+          else options0
+        (options1 /: more_options)(_ + _)
+      }
 
-        case _ => error("Bad arguments:\n" + cat_lines(args))
-      }
+      if (get_option != "")
+        Console.println(options.check_name(get_option).value)
+
+      if (export_file != "")
+        File.write(Path.explode(export_file), YXML.string_of_body(options.encode))
+
+      if (get_option == "" && export_file == "")
+        Console.println(options.print)
     }
   }
 }
--- a/src/Pure/Thy/thy_header.ML	Mon Feb 29 11:42:15 2016 +0000
+++ b/src/Pure/Thy/thy_header.ML	Mon Feb 29 15:13:11 2016 +0000
@@ -42,8 +42,6 @@
 
 (* bootstrap keywords *)
 
-val headerN = "header";  (* FIXME legacy *)
-
 val chapterN = "chapter";
 val sectionN = "section";
 val subsectionN = "subsection";
@@ -72,7 +70,6 @@
      ((beginN, @{here}), NONE),
      ((importsN, @{here}), NONE),
      ((keywordsN, @{here}), NONE),
-     ((headerN, @{here}), SOME ((Keyword.document_heading, []), [])),
      ((chapterN, @{here}), SOME ((Keyword.document_heading, []), [])),
      ((sectionN, @{here}), SOME ((Keyword.document_heading, []), [])),
      ((subsectionN, @{here}), SOME ((Keyword.document_heading, []), [])),
@@ -147,8 +144,7 @@
 (* read header *)
 
 val heading =
-  (Parse.command headerN ||
-    Parse.command chapterN ||
+  (Parse.command chapterN ||
     Parse.command sectionN ||
     Parse.command subsectionN ||
     Parse.command subsubsectionN ||
--- a/src/Pure/Thy/thy_header.scala	Mon Feb 29 11:42:15 2016 +0000
+++ b/src/Pure/Thy/thy_header.scala	Mon Feb 29 15:13:11 2016 +0000
@@ -19,8 +19,6 @@
 
   type Keywords = List[(String, Option[Keyword.Spec], Option[String])]
 
-  val HEADER = "header"  /* FIXME legacy */
-
   val CHAPTER = "chapter"
   val SECTION = "section"
   val SUBSECTION = "subsection"
@@ -49,7 +47,6 @@
       (BEGIN, None, None),
       (IMPORTS, None, None),
       (KEYWORDS, None, None),
-      (HEADER, Some(((Keyword.DOCUMENT_HEADING, Nil), Nil)), None),
       (CHAPTER, Some(((Keyword.DOCUMENT_HEADING, Nil), Nil)), None),
       (SECTION, Some(((Keyword.DOCUMENT_HEADING, Nil), Nil)), None),
       (SUBSECTION, Some(((Keyword.DOCUMENT_HEADING, Nil), Nil)), None),
@@ -115,8 +112,7 @@
       { case x ~ ys ~ zs ~ _ => Thy_Header(x, ys, zs) }
 
     val heading =
-      (command(HEADER) |
-        command(CHAPTER) |
+      (command(CHAPTER) |
         command(SECTION) |
         command(SUBSECTION) |
         command(SUBSUBSECTION) |
--- a/src/Pure/Thy/thy_output.ML	Mon Feb 29 11:42:15 2016 +0000
+++ b/src/Pure/Thy/thy_output.ML	Mon Feb 29 15:13:11 2016 +0000
@@ -35,7 +35,6 @@
   val string_of_margin: Proof.context -> Pretty.T -> string
   val output: Proof.context -> Pretty.T list -> string
   val verbatim_text: Proof.context -> string -> string
-  val old_header_command: Input.source -> Toplevel.transition -> Toplevel.transition
   val document_command: {markdown: bool} -> (xstring * Position.T) option * Input.source ->
     Toplevel.transition -> Toplevel.transition
 end;
@@ -647,14 +646,7 @@
 
 
 
-(** document commands **)
-
-fun old_header_command txt =
-  Toplevel.keep (fn state =>
-    if Toplevel.is_toplevel state then
-     (legacy_feature "Obsolete 'header' command -- use 'chapter', 'section' etc. instead";
-      ignore (output_text state {markdown = false} txt))
-    else raise Toplevel.UNDEF);
+(** document command **)
 
 fun document_command markdown (loc, txt) =
   Toplevel.keep (fn state =>
--- a/src/Pure/Tools/build_doc.scala	Mon Feb 29 11:42:15 2016 +0000
+++ b/src/Pure/Tools/build_doc.scala	Mon Feb 29 15:13:11 2016 +0000
@@ -72,20 +72,35 @@
   def main(args: Array[String])
   {
     Command_Line.tool {
-      args.toList match {
-        case
-          Properties.Value.Boolean(all_docs) ::
-          Properties.Value.Int(max_jobs) ::
-          Properties.Value.Boolean(system_mode) ::
-          Command_Line.Chunks(docs) =>
-            val options = Options.init()
-            val progress = new Console_Progress()
-            progress.interrupt_handler {
-              build_doc(options, progress, all_docs, max_jobs, system_mode, docs)
-            }
-        case _ => error("Bad arguments:\n" + cat_lines(args))
+      var all_docs = false
+      var max_jobs = 1
+      var system_mode = false
+
+      val getopts =
+        Getopts("""
+Usage: isabelle build_doc [OPTIONS] [DOCS ...]"
+
+  Options are:
+    -a           select all documentation sessions
+    -j INT       maximum number of parallel jobs (default 1)
+    -s           system build mode
+
+  Build Isabelle documentation from documentation sessions with
+  suitable document_variants entry.
+""",
+        "a" -> (_ => all_docs = true),
+        "j:" -> (arg => max_jobs = Properties.Value.Int.parse(arg)),
+        "s" -> (_ => system_mode = true))
+
+      val docs = getopts(args)
+
+      if (!all_docs && docs.isEmpty) getopts.usage()
+
+      val options = Options.init()
+      val progress = new Console_Progress()
+      progress.interrupt_handler {
+        build_doc(options, progress, all_docs, max_jobs, system_mode, docs)
       }
     }
   }
 }
-
--- a/src/Pure/Tools/check_source.scala	Mon Feb 29 11:42:15 2016 +0000
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,61 +0,0 @@
-/*  Title:      Pure/Tools/check_source.scala
-    Author:     Makarius
-
-Some sanity checks for Isabelle sources.
-*/
-
-package isabelle
-
-
-object Check_Source
-{
-  def check_file(path: Path)
-  {
-    val file_name = path.implode
-    val file_pos = path.position
-    def line_pos(i: Int) = Position.Line_File(i + 1, file_name)
-
-    val content = File.read(path)
-
-    for { (line, i) <- split_lines(content).iterator.zipWithIndex }
-    {
-      try {
-        Symbol.decode_strict(line)
-
-        for { c <- Word.codepoint_iterator(line); if c > 128 && !Character.isAlphabetic(c) }
-        {
-          Output.warning("Suspicious Unicode character " + quote(Word.codepoint(c)) +
-            Position.here(line_pos(i)))
-        }
-      }
-      catch { case ERROR(msg) => Output.error_message(msg + Position.here(line_pos(i))) }
-
-      if (line.contains('\t'))
-        Output.warning("TAB character" + Position.here(line_pos(i)))
-    }
-
-    if (content.contains('\r'))
-      Output.warning("CR character" + Position.here(file_pos))
-  }
-
-  def check_hg(root: Path)
-  {
-    Output.writeln("Checking " + root + " ...")
-    Isabelle_System.hg("--repository " + File.shell_path(root) + " root").check
-    for {
-      file <- Isabelle_System.hg("manifest", root).check.out_lines
-      if file.endsWith(".thy") || file.endsWith(".ML") || file.endsWith("/ROOT")
-    } check_file(root + Path.explode(file))
-  }
-
-
-  /* command line entry point */
-
-  def main(args: Array[String])
-  {
-    Command_Line.tool0 {
-      for (root <- args) check_hg(Path.explode(root))
-    }
-  }
-}
-
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/src/Pure/Tools/check_sources.scala	Mon Feb 29 15:13:11 2016 +0000
@@ -0,0 +1,69 @@
+/*  Title:      Pure/Tools/check_sources.scala
+    Author:     Makarius
+
+Some sanity checks for Isabelle sources.
+*/
+
+package isabelle
+
+
+object Check_Sources
+{
+  def check_file(path: Path)
+  {
+    val file_name = path.implode
+    val file_pos = path.position
+    def line_pos(i: Int) = Position.Line_File(i + 1, file_name)
+
+    val content = File.read(path)
+
+    for { (line, i) <- split_lines(content).iterator.zipWithIndex }
+    {
+      try {
+        Symbol.decode_strict(line)
+
+        for { c <- Word.codepoint_iterator(line); if c > 128 && !Character.isAlphabetic(c) }
+        {
+          Output.warning("Suspicious Unicode character " + quote(Word.codepoint(c)) +
+            Position.here(line_pos(i)))
+        }
+      }
+      catch { case ERROR(msg) => Output.error_message(msg + Position.here(line_pos(i))) }
+
+      if (line.contains('\t'))
+        Output.warning("TAB character" + Position.here(line_pos(i)))
+    }
+
+    if (content.contains('\r'))
+      Output.warning("CR character" + Position.here(file_pos))
+  }
+
+  def check_hg(root: Path)
+  {
+    Output.writeln("Checking " + root + " ...")
+    Isabelle_System.hg("--repository " + File.shell_path(root) + " root").check
+    for {
+      file <- Isabelle_System.hg("manifest", root).check.out_lines
+      if file.endsWith(".thy") || file.endsWith(".ML") || file.endsWith("/ROOT")
+    } check_file(root + Path.explode(file))
+  }
+
+
+  /* command line entry point */
+
+  def main(args: Array[String])
+  {
+    Command_Line.tool0 {
+      val getopts = Getopts("""
+Usage: isabelle check_sources [ROOT_DIRS...]
+
+  Check .thy, .ML, ROOT files from manifest of Mercurial ROOT_DIRS.
+""")
+
+      val specs = getopts(args)
+      if (specs.isEmpty) getopts.usage()
+
+      for (root <- specs) check_hg(Path.explode(root))
+    }
+  }
+}
--- a/src/Pure/Tools/doc.scala	Mon Feb 29 11:42:15 2016 +0000
+++ b/src/Pure/Tools/doc.scala	Mon Feb 29 15:13:11 2016 +0000
@@ -96,13 +96,20 @@
   def main(args: Array[String])
   {
     Command_Line.tool0 {
+      val getopts = Getopts("""
+Usage: isabelle doc [DOC ...]
+
+  View Isabelle documentation.
+""")
+      val docs = getopts(args)
+
       val entries = contents()
-      if (args.isEmpty) Console.println(cat_lines(contents_lines().map(_._2)))
+      if (docs.isEmpty) Console.println(cat_lines(contents_lines().map(_._2)))
       else {
-        args.foreach(arg =>
-          entries.collectFirst { case Doc(name, _, path) if arg == name => path } match {
+        docs.foreach(doc =>
+          entries.collectFirst { case Doc(name, _, path) if doc == name => path } match {
             case Some(path) => view(path)
-            case None => error("No Isabelle documentation entry: " + quote(arg))
+            case None => error("No Isabelle documentation entry: " + quote(doc))
           }
         )
       }
--- a/src/Pure/Tools/update_cartouches.scala	Mon Feb 29 11:42:15 2016 +0000
+++ b/src/Pure/Tools/update_cartouches.scala	Mon Feb 29 15:13:11 2016 +0000
@@ -87,13 +87,31 @@
   def main(args: Array[String])
   {
     Command_Line.tool0 {
-      args.toList match {
-        case Properties.Value.Boolean(replace_comment) ::
-            Properties.Value.Boolean(replace_text) :: files =>
-          files.foreach(file =>
-            update_cartouches(replace_comment, replace_text, Path.explode(file)))
-        case _ => error("Bad arguments:\n" + cat_lines(args))
-      }
+      var replace_comment = false
+      var replace_text = false
+
+      val getopts = Getopts("""
+Usage: isabelle update_cartouches [FILES|DIRS...]
+
+  Options are:
+    -c           replace comment marker "--" by symbol "\<comment>"
+    -t           replace @{text} antiquotations within text tokens
+
+  Recursively find .thy files and update theory syntax to use cartouches
+  instead of old-style {* verbatim *} or `alt_string` tokens.
+
+  Old versions of files are preserved by appending "~~".
+""",
+        "c" -> (_ => replace_comment = true),
+        "t" -> (_ => replace_text = true))
+
+      val specs = getopts(args)
+      if (specs.isEmpty) getopts.usage()
+
+      for {
+        spec <- specs
+        file <- File.find_files(Path.explode(spec).file, file => file.getName.endsWith(".thy"))
+      } update_cartouches(replace_comment, replace_text, Path.explode(File.standard_path(file)))
     }
   }
 }
--- a/src/Pure/Tools/update_header.scala	Mon Feb 29 11:42:15 2016 +0000
+++ b/src/Pure/Tools/update_header.scala	Mon Feb 29 15:13:11 2016 +0000
@@ -31,14 +31,32 @@
   def main(args: Array[String])
   {
     Command_Line.tool0 {
-      args.toList match {
-        case section :: files =>
-          if (!headings.contains(section))
-            error("Bad heading command: " + quote(section))
-          files.foreach(file => update_header(section, Path.explode(file)))
-        case _ =>
-            error("Bad arguments:\n" + cat_lines(args))
-      }
+      var section = "section"
+
+      val getopts = Getopts("""
+Usage: isabelle update_header [FILES|DIRS...]
+
+  Options are:
+    -s COMMAND   alternative heading command (default 'section')
+
+  Recursively find .thy files and replace obsolete theory header commands
+  by 'chapter', 'section' (default), 'subsection', 'subsubsection',
+  'paragraph', 'subparagraph'.
+
+  Old versions of files are preserved by appending "~~".
+""",
+        "s:" -> (arg => section = arg))
+
+      val specs = getopts(args)
+      if (specs.isEmpty) getopts.usage()
+
+      if (!headings.contains(section))
+        error("Bad heading command: " + quote(section))
+
+      for {
+        spec <- specs
+        file <- File.find_files(Path.explode(spec).file, file => file.getName.endsWith(".thy"))
+      } update_header(section, Path.explode(File.standard_path(file)))
     }
   }
 }
--- a/src/Pure/Tools/update_semicolons.scala	Mon Feb 29 11:42:15 2016 +0000
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,34 +0,0 @@
-/*  Title:      Pure/Tools/update_semicolons.scala
-    Author:     Makarius
-
-Remove obsolete semicolons from theory sources.
-*/
-
-package isabelle
-
-
-object Update_Semicolons
-{
-  def update_semicolons(path: Path)
-  {
-    val text0 = File.read(path)
-    val text1 =
-      (for (tok <- Token.explode(Keyword.Keywords.empty, text0).iterator if tok.source != ";")
-        yield tok.source).mkString
-
-    if (text0 != text1) {
-      Output.writeln("changing " + path)
-      File.write_backup2(path, text1)
-    }
-  }
-
-
-  /* command line entry point */
-
-  def main(args: Array[String])
-  {
-    Command_Line.tool0 {
-      args.foreach(arg => update_semicolons(Path.explode(arg)))
-    }
-  }
-}
--- a/src/Pure/Tools/update_then.scala	Mon Feb 29 11:42:15 2016 +0000
+++ b/src/Pure/Tools/update_then.scala	Mon Feb 29 15:13:11 2016 +0000
@@ -33,7 +33,24 @@
   def main(args: Array[String])
   {
     Command_Line.tool0 {
-      args.foreach(arg => update_then(Path.explode(arg)))
+      val getopts = Getopts("""
+Usage: isabelle update_then [FILES|DIRS...]
+
+  Recursively find .thy files and expand old Isar command conflations:
+
+    hence  ~>  then have
+    thus   ~>  then show
+
+  Old versions of files are preserved by appending "~~".
+""")
+
+      val specs = getopts(args)
+      if (specs.isEmpty) getopts.usage()
+
+      for {
+        spec <- specs
+        file <- File.find_files(Path.explode(spec).file, file => file.getName.endsWith(".thy"))
+      } update_then(Path.explode(File.standard_path(file)))
     }
   }
 }
--- a/src/Pure/Tools/update_theorems.scala	Mon Feb 29 11:42:15 2016 +0000
+++ b/src/Pure/Tools/update_theorems.scala	Mon Feb 29 15:13:11 2016 +0000
@@ -34,7 +34,26 @@
   def main(args: Array[String])
   {
     Command_Line.tool0 {
-      args.foreach(arg => update_theorems(Path.explode(arg)))
+      val getopts = Getopts("""
+Usage: isabelle update_theorems [FILES|DIRS...]
+
+  Recursively find .thy files and update toplevel theorem keywords:
+
+    theorems             ~>  lemmas
+    schematic_theorem    ~>  schematic_goal
+    schematic_lemma      ~>  schematic_goal
+    schematic_corollary  ~>  schematic_goal
+
+  Old versions of files are preserved by appending "~~".
+""")
+
+      val specs = getopts(args)
+      if (specs.isEmpty) getopts.usage()
+
+      for {
+        spec <- specs
+        file <- File.find_files(Path.explode(spec).file, file => file.getName.endsWith(".thy"))
+      } update_theorems(Path.explode(File.standard_path(file)))
     }
   }
 }
--- a/src/Pure/build-jars	Mon Feb 29 11:42:15 2016 +0000
+++ b/src/Pure/build-jars	Mon Feb 29 15:13:11 2016 +0000
@@ -75,6 +75,7 @@
   ROOT.scala
   System/command_line.scala
   System/cygwin.scala
+  System/getopts.scala
   System/invoke_scala.scala
   System/isabelle_charset.scala
   System/isabelle_process.scala
@@ -96,7 +97,7 @@
   Tools/build_console.scala
   Tools/build_doc.scala
   Tools/check_keywords.scala
-  Tools/check_source.scala
+  Tools/check_sources.scala
   Tools/debugger.scala
   Tools/doc.scala
   Tools/main.scala
@@ -107,7 +108,6 @@
   Tools/task_statistics.scala
   Tools/update_cartouches.scala
   Tools/update_header.scala
-  Tools/update_semicolons.scala
   Tools/update_then.scala
   Tools/update_theorems.scala
   library.scala
--- a/src/Pure/pure_syn.ML	Mon Feb 29 11:42:15 2016 +0000
+++ b/src/Pure/pure_syn.ML	Mon Feb 29 15:13:11 2016 +0000
@@ -14,10 +14,6 @@
 struct
 
 val _ =
-  Outer_Syntax.command ("header", @{here}) "theory header"
-    (Parse.document_source >> Thy_Output.old_header_command);
-
-val _ =
   Outer_Syntax.command ("chapter", @{here}) "chapter heading"
     (Parse.opt_target -- Parse.document_source >> Thy_Output.document_command {markdown = false});
 
--- a/src/Tools/jEdit/src/scala_console.scala	Mon Feb 29 11:42:15 2016 +0000
+++ b/src/Tools/jEdit/src/scala_console.scala	Mon Feb 29 15:13:11 2016 +0000
@@ -27,23 +27,10 @@
 
   private def reconstruct_classpath(): String =
   {
-    def find_files(start: JFile, ok: JFile => Boolean = _ => true): List[JFile] =
-    {
-      val files = new mutable.ListBuffer[JFile]
-      val filter = new FileFilter { def accept(entry: JFile) = entry.isDirectory || ok(entry) }
-      def find_entry(entry: JFile)
-      {
-        if (ok(entry)) files += entry
-        if (entry.isDirectory) entry.listFiles(filter).foreach(find_entry)
-      }
-      find_entry(start)
-      files.toList
-    }
-
     def find_jars(start: String): List[String] =
       if (start != null)
-        find_files(new JFile(start),
-          entry => entry.isFile && entry.getName.endsWith(".jar")).map(_.getAbsolutePath)
+        File.find_files(new JFile(start), file => file.getName.endsWith(".jar")).
+          map(_.getAbsolutePath)
       else Nil
 
     val initial_class_path =