texlive[41748] Build/source/libs/harfbuzz: harfbuzz 1.3.0

commits+kakuto at tug.org commits+kakuto at tug.org
Fri Jul 22 01:35:31 CEST 2016


Revision: 41748
          http://tug.org/svn/texlive?view=revision&revision=41748
Author:   kakuto
Date:     2016-07-22 01:35:31 +0200 (Fri, 22 Jul 2016)
Log Message:
-----------
harfbuzz 1.3.0

Modified Paths:
--------------
    trunk/Build/source/libs/harfbuzz/ChangeLog
    trunk/Build/source/libs/harfbuzz/configure
    trunk/Build/source/libs/harfbuzz/harfbuzz-PATCHES/ChangeLog
    trunk/Build/source/libs/harfbuzz/harfbuzz-PATCHES/TL-Changes
    trunk/Build/source/libs/harfbuzz/harfbuzz-src/BUILD.md
    trunk/Build/source/libs/harfbuzz/harfbuzz-src/ChangeLog
    trunk/Build/source/libs/harfbuzz/harfbuzz-src/NEWS
    trunk/Build/source/libs/harfbuzz/harfbuzz-src/configure.ac
    trunk/Build/source/libs/harfbuzz/harfbuzz-src/src/gen-indic-table.py
    trunk/Build/source/libs/harfbuzz/harfbuzz-src/src/gen-use-table.py
    trunk/Build/source/libs/harfbuzz/harfbuzz-src/src/hb-buffer.cc
    trunk/Build/source/libs/harfbuzz/harfbuzz-src/src/hb-common.cc
    trunk/Build/source/libs/harfbuzz/harfbuzz-src/src/hb-common.h
    trunk/Build/source/libs/harfbuzz/harfbuzz-src/src/hb-coretext.cc
    trunk/Build/source/libs/harfbuzz/harfbuzz-src/src/hb-directwrite.cc
    trunk/Build/source/libs/harfbuzz/harfbuzz-src/src/hb-directwrite.h
    trunk/Build/source/libs/harfbuzz/harfbuzz-src/src/hb-font-private.hh
    trunk/Build/source/libs/harfbuzz/harfbuzz-src/src/hb-font.cc
    trunk/Build/source/libs/harfbuzz/harfbuzz-src/src/hb-ft.cc
    trunk/Build/source/libs/harfbuzz/harfbuzz-src/src/hb-gobject-structs.h
    trunk/Build/source/libs/harfbuzz/harfbuzz-src/src/hb-ot-font.cc
    trunk/Build/source/libs/harfbuzz/harfbuzz-src/src/hb-ot-layout-gsub-table.hh
    trunk/Build/source/libs/harfbuzz/harfbuzz-src/src/hb-ot-layout-gsubgpos-private.hh
    trunk/Build/source/libs/harfbuzz/harfbuzz-src/src/hb-ot-layout.cc
    trunk/Build/source/libs/harfbuzz/harfbuzz-src/src/hb-ot-shape-complex-arabic-table.hh
    trunk/Build/source/libs/harfbuzz/harfbuzz-src/src/hb-ot-shape-complex-indic-machine.hh
    trunk/Build/source/libs/harfbuzz/harfbuzz-src/src/hb-ot-shape-complex-indic-machine.rl
    trunk/Build/source/libs/harfbuzz/harfbuzz-src/src/hb-ot-shape-complex-indic-private.hh
    trunk/Build/source/libs/harfbuzz/harfbuzz-src/src/hb-ot-shape-complex-indic-table.cc
    trunk/Build/source/libs/harfbuzz/harfbuzz-src/src/hb-ot-shape-complex-indic.cc
    trunk/Build/source/libs/harfbuzz/harfbuzz-src/src/hb-ot-shape-complex-myanmar-machine.hh
    trunk/Build/source/libs/harfbuzz/harfbuzz-src/src/hb-ot-shape-complex-myanmar.cc
    trunk/Build/source/libs/harfbuzz/harfbuzz-src/src/hb-ot-shape-complex-private.hh
    trunk/Build/source/libs/harfbuzz/harfbuzz-src/src/hb-ot-shape-complex-use-machine.hh
    trunk/Build/source/libs/harfbuzz/harfbuzz-src/src/hb-ot-shape-complex-use-machine.rl
    trunk/Build/source/libs/harfbuzz/harfbuzz-src/src/hb-ot-shape-complex-use-private.hh
    trunk/Build/source/libs/harfbuzz/harfbuzz-src/src/hb-ot-shape-complex-use-table.cc
    trunk/Build/source/libs/harfbuzz/harfbuzz-src/src/hb-ot-shape-complex-use.cc
    trunk/Build/source/libs/harfbuzz/harfbuzz-src/src/hb-private.hh
    trunk/Build/source/libs/harfbuzz/harfbuzz-src/src/hb-shape.cc
    trunk/Build/source/libs/harfbuzz/harfbuzz-src/src/hb-ucdn.cc
    trunk/Build/source/libs/harfbuzz/harfbuzz-src/src/hb-unicode-private.hh
    trunk/Build/source/libs/harfbuzz/harfbuzz-src/src/hb-unicode.h
    trunk/Build/source/libs/harfbuzz/version.ac

Modified: trunk/Build/source/libs/harfbuzz/ChangeLog
===================================================================
--- trunk/Build/source/libs/harfbuzz/ChangeLog	2016-07-21 23:20:53 UTC (rev 41747)
+++ trunk/Build/source/libs/harfbuzz/ChangeLog	2016-07-21 23:35:31 UTC (rev 41748)
@@ -1,3 +1,8 @@
+2016-07-22  Akira Kakuto  <kakuto at fuk.kindai.ac.jp>
+
+	Import harfbuzz-1.3.0.
+	* version.ac: Adjusted.
+
 2016-05-02  Akira Kakuto  <kakuto at fuk.kindai.ac.jp>
 
 	Import harfbuzz-1.2.7.

Modified: trunk/Build/source/libs/harfbuzz/configure
===================================================================
--- trunk/Build/source/libs/harfbuzz/configure	2016-07-21 23:20:53 UTC (rev 41747)
+++ trunk/Build/source/libs/harfbuzz/configure	2016-07-21 23:35:31 UTC (rev 41748)
@@ -1,6 +1,6 @@
 #! /bin/sh
 # Guess values for system-dependent variables and create Makefiles.
-# Generated by GNU Autoconf 2.69 for harfbuzz (TeX Live) 1.2.7.
+# Generated by GNU Autoconf 2.69 for harfbuzz (TeX Live) 1.3.0.
 #
 # Report bugs to <tex-k at tug.org>.
 #
@@ -580,8 +580,8 @@
 # Identity of this package.
 PACKAGE_NAME='harfbuzz (TeX Live)'
 PACKAGE_TARNAME='harfbuzz--tex-live-'
-PACKAGE_VERSION='1.2.7'
-PACKAGE_STRING='harfbuzz (TeX Live) 1.2.7'
+PACKAGE_VERSION='1.3.0'
+PACKAGE_STRING='harfbuzz (TeX Live) 1.3.0'
 PACKAGE_BUGREPORT='tex-k at tug.org'
 PACKAGE_URL=''
 
@@ -1312,7 +1312,7 @@
   # Omit some internal or obsolete options to make the list less imposing.
   # This message is too long to be a string in the A/UX 3.1 sh.
   cat <<_ACEOF
-\`configure' configures harfbuzz (TeX Live) 1.2.7 to adapt to many kinds of systems.
+\`configure' configures harfbuzz (TeX Live) 1.3.0 to adapt to many kinds of systems.
 
 Usage: $0 [OPTION]... [VAR=VALUE]...
 
@@ -1383,7 +1383,7 @@
 
 if test -n "$ac_init_help"; then
   case $ac_init_help in
-     short | recursive ) echo "Configuration of harfbuzz (TeX Live) 1.2.7:";;
+     short | recursive ) echo "Configuration of harfbuzz (TeX Live) 1.3.0:";;
    esac
   cat <<\_ACEOF
 
@@ -1490,7 +1490,7 @@
 test -n "$ac_init_help" && exit $ac_status
 if $ac_init_version; then
   cat <<\_ACEOF
-harfbuzz (TeX Live) configure 1.2.7
+harfbuzz (TeX Live) configure 1.3.0
 generated by GNU Autoconf 2.69
 
 Copyright (C) 2012 Free Software Foundation, Inc.
@@ -2080,7 +2080,7 @@
 This file contains any messages produced by compilers while
 running configure, to aid debugging if configure makes a mistake.
 
-It was created by harfbuzz (TeX Live) $as_me 1.2.7, which was
+It was created by harfbuzz (TeX Live) $as_me 1.3.0, which was
 generated by GNU Autoconf 2.69.  Invocation command line was
 
   $ $0 $@
@@ -4003,7 +4003,7 @@
 
 # Define the identity of the package.
  PACKAGE='harfbuzz--tex-live-'
- VERSION='1.2.7'
+ VERSION='1.3.0'
 
 
 cat >>confdefs.h <<_ACEOF
@@ -4207,7 +4207,7 @@
 HB_VERSION_MAJOR=1
 HB_VERSION_MINOR=2
 HB_VERSION_MICRO=7
-HB_VERSION=1.2.7
+HB_VERSION=1.3.0
 
 ac_ext=c
 ac_cpp='$CPP $CPPFLAGS'
@@ -6866,7 +6866,7 @@
 # report actual input values of CONFIG_FILES etc. instead of their
 # values after options handling.
 ac_log="
-This file was extended by harfbuzz (TeX Live) $as_me 1.2.7, which was
+This file was extended by harfbuzz (TeX Live) $as_me 1.3.0, which was
 generated by GNU Autoconf 2.69.  Invocation command line was
 
   CONFIG_FILES    = $CONFIG_FILES
@@ -6932,7 +6932,7 @@
 cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1
 ac_cs_config="`$as_echo "$ac_configure_args" | sed 's/^ //; s/[\\""\`\$]/\\\\&/g'`"
 ac_cs_version="\\
-harfbuzz (TeX Live) config.status 1.2.7
+harfbuzz (TeX Live) config.status 1.3.0
 configured by $0, generated by GNU Autoconf 2.69,
   with options \\"\$ac_cs_config\\"
 

Modified: trunk/Build/source/libs/harfbuzz/harfbuzz-PATCHES/ChangeLog
===================================================================
--- trunk/Build/source/libs/harfbuzz/harfbuzz-PATCHES/ChangeLog	2016-07-21 23:20:53 UTC (rev 41747)
+++ trunk/Build/source/libs/harfbuzz/harfbuzz-PATCHES/ChangeLog	2016-07-21 23:35:31 UTC (rev 41748)
@@ -1,3 +1,8 @@
+2016-07-22  Akira Kakuto  <kakuto at fuk.kindai.ac.jp>
+
+	Imported harfbuzz-1.3.0 source tree from:
+	  http://www.freedesktop.org/software/harfbuzz/release/
+
 2016-05-02  Akira Kakuto  <kakuto at fuk.kindai.ac.jp>
 
 	Imported harfbuzz-1.2.7 source tree from:

Modified: trunk/Build/source/libs/harfbuzz/harfbuzz-PATCHES/TL-Changes
===================================================================
--- trunk/Build/source/libs/harfbuzz/harfbuzz-PATCHES/TL-Changes	2016-07-21 23:20:53 UTC (rev 41747)
+++ trunk/Build/source/libs/harfbuzz/harfbuzz-PATCHES/TL-Changes	2016-07-21 23:35:31 UTC (rev 41748)
@@ -1,4 +1,4 @@
-Changes applied to the harfbuzz-1.2.7/ tree as obtained from:
+Changes applied to the harfbuzz-1.3.0/ tree as obtained from:
 	http://www.freedesktop.org/software/harfbuzz/release/
 
 Removed:

Modified: trunk/Build/source/libs/harfbuzz/harfbuzz-src/BUILD.md
===================================================================
--- trunk/Build/source/libs/harfbuzz/harfbuzz-src/BUILD.md	2016-07-21 23:20:53 UTC (rev 41747)
+++ trunk/Build/source/libs/harfbuzz/harfbuzz-src/BUILD.md	2016-07-21 23:35:31 UTC (rev 41748)
@@ -1,5 +1,4 @@
-On Linux, install the development packages for
-[FreeType](http://www.freedesktop.org/wiki/Software/FreeType/),
+On Linux, install the development packages for FreeType,
 Cairo, and GLib. For example, on Ubuntu / Debian, you would do:
 * sudo apt-get install gcc g++ libfreetype6-dev libglib2.0-dev libcairo2-dev
 
@@ -30,4 +29,8 @@
 * sudo port install autoconf automake libtool pkgconfig ragel gtk-doc
 
 or using Homebrew:
-* brew port install autoconf automake libtool pkgconfig ragel gtk-doc
+* brew install autoconf automake libtool pkgconfig ragel gtk-doc
+
+To build the Python bindings, you also need:
+
+* brew install pygobject3

Modified: trunk/Build/source/libs/harfbuzz/harfbuzz-src/ChangeLog
===================================================================
--- trunk/Build/source/libs/harfbuzz/harfbuzz-src/ChangeLog	2016-07-21 23:20:53 UTC (rev 41747)
+++ trunk/Build/source/libs/harfbuzz/harfbuzz-src/ChangeLog	2016-07-21 23:35:31 UTC (rev 41748)
@@ -1,6 +1,579 @@
+commit 08c08af2f9ed683ad20322c3ef1ba0f87ce15426
+Author: Behdad Esfahbod <behdad at behdad.org>
+Date:   Thu Jul 21 01:23:33 2016 -0700
+
+    [ucdn] Update to Unicode 9.0.0
+
+    Fixes https://github.com/grigorig/ucdn/issues/12
+
+ src/hb-ucdn.cc               |    6 +
+ src/hb-ucdn/README           |    1 -
+ src/hb-ucdn/ucdn.c           |   80 +-
+ src/hb-ucdn/ucdn.h           |   98 +-
+ src/hb-ucdn/unicodedata_db.h | 4750
+ +++++++++++++++++++++++-------------------
+ 5 files changed, 2783 insertions(+), 2152 deletions(-)
+
+commit f3f6c1ccbf89e15cda03e0c3a2df4297e98adf60
+Author: jfkthame <jfkthame at gmail.com>
+Date:   Thu Jun 16 00:10:42 2016 +0100
+
+    Blacklist GDEF tables of more fonts
+
+    This is based on bug reports that have been filed against Firefox
+    since it
+    updated to a version of harfbuzz that uses zeroing by GDEF rather
+    than by
+    Unicode. I'm sure there are a bunch more font versions that should
+    also be
+    included; these are just the ones I have on hand and have confirmed
+    as having
+    bad GDEF data.
+
+    Given how the list here is growing, I think we should reconsider
+    the approach,
+    and perhaps revert to zeroing by Unicode instead.
+
+    Fixes https://github.com/behdad/harfbuzz/issues/264
+    Fixes https://github.com/behdad/harfbuzz/pull/266
+
+ src/hb-ot-layout.cc | 39 +++++++++++++++++++++++++++++++++++++++
+ 1 file changed, 39 insertions(+)
+
+commit 34f9aa582c3a03b578c7eae3d2e8860a0bd5cb00
+Author: Behdad Esfahbod <behdad at behdad.org>
+Date:   Wed Jul 20 02:35:54 2016 -0700
+
+    Implement symbol cmap in ft and ot fonts
+
+    Fixes https://github.com/behdad/harfbuzz/issues/236
+    Fixes https://bugs.chromium.org/p/chromium/issues/detail?id=627953
+
+ src/hb-ft.cc      | 27 +++++++++++++++++++++++----
+ src/hb-ot-font.cc | 50 ++++++++++++++++++++++++++++++++++++++------------
+ 2 files changed, 61 insertions(+), 16 deletions(-)
+
+commit 6363d7df28dc4307ef1abb9857d14c35e656b85a
+Author: Behdad Esfahbod <behdad at behdad.org>
+Date:   Wed Jul 20 01:43:56 2016 -0700
+
+    Clean up buffer area when rewinding
+
+    Fixes https://bugs.chromium.org/p/chromium/issues/detail?id=614647
+    If allocation fails, we might be leaving junk behind.  At least
+    clear it up.
+
+ src/hb-buffer.cc | 8 ++++++++
+ 1 file changed, 8 insertions(+)
+
+commit f80c34eb556d12c45c961d6742c289baef58899d
+Author: Behdad Esfahbod <behdad at behdad.org>
+Date:   Tue Jul 12 11:18:26 2016 -0700
+
+    Whitespace
+
+ src/hb-unicode-private.hh | 4 ++--
+ 1 file changed, 2 insertions(+), 2 deletions(-)
+
+commit 874421203e0161db2cbfb27be6c039cba57f7c63
+Author: Ebrahim Byagowi <ebrahim at gnu.org>
+Date:   Tue Jul 12 03:49:21 2016 +0430
+
+    [coretext] Speculative fix for CoreText nullptr access (#288)
+
+ src/hb-coretext.cc | 14 +++++++++-----
+ 1 file changed, 9 insertions(+), 5 deletions(-)
+
+commit 6bf9db4f1e1d51f9acb5e37b89caa8f4d275e7ce
+Author: Birunthan Mohanathas <birunthan at mohanathas.com>
+Date:   Mon Jul 11 13:38:23 2016 -0700
+
+    [ft] Fix unsafe cast of FT_Done_Face in
+    hb_ft_{face,font}_create_referenced (#289)
+
+    Prior to this change the function `FT_Error FT_Done_Face(FT_Face
+    *)` was
+    called through a pointer with the signature `void (void *)`
+    resulting in
+    undefined behaviour.
+
+ src/hb-ft.cc | 12 +++++++++---
+ 1 file changed, 9 insertions(+), 3 deletions(-)
+
+commit 0b8f3ab0220ca4731516313828515f26bb480645
+Author: Steve Lhomme <slhomme at matroska.org>
+Date:   Mon Jul 11 21:57:26 2016 +0200
+
+    clang in MSVC mode doesn't like when we redefine __attribute__ (#283)
+
+ src/hb-private.hh | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+commit 2f522fd485c2e946c9bce9e3828b6ff6247c59e4
+Merge: d3e2a06 e4d451e
+Author: Behdad Esfahbod <behdad at behdad.org>
+Date:   Fri Jul 1 17:09:28 2016 -0700
+
+    Merge pull request #286 from khaledhosny/gi-tag_from_string
+
+    [introspection] Fix hb_tag_from_string annotation
+
+commit e4d451ee55a57e1231b4076fcd1e87994f6b9528
+Author: Khaled Hosny <khaledhosny at eglug.org>
+Date:   Sat Jul 2 00:04:57 2016 +0200
+
+    [introspection] Fix hb_tag_from_string annotation
+
+ src/hb-common.cc | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+commit d3e2a06b0f2587e913a9c3ff1a20c187f260db80
+Author: Behdad Esfahbod <behdad at behdad.org>
+Date:   Thu Jun 30 11:01:22 2016 -0700
+
+    [python] Use utf-32 / utf-16 based on build of Python
+
+    Fixes https://github.com/behdad/harfbuzz/pull/271
+
+ src/sample.py | 22 +++++++++++++++++++++-
+ 1 file changed, 21 insertions(+), 1 deletion(-)
+
+commit fc9de44a03a97f6e93bd98d804596cb1f9f4b5fd
+Author: Behdad Esfahbod <behdad at behdad.org>
+Date:   Thu Jun 30 09:46:52 2016 -0700
+
+    Comments
+
+ src/hb-coretext.cc | 18 +++++++++---------
+ 1 file changed, 9 insertions(+), 9 deletions(-)
+
+commit 46809dee30232d493539519b1bb527fa816c37db
+Merge: 70e72e5 1bea49e
+Author: Behdad Esfahbod <behdad at behdad.org>
+Date:   Thu Jun 30 09:41:03 2016 -0700
+
+    Merge pull request #268 from drott/conflictingFontFix
+
+    Discard reconfigured CTFont if URL changes
+
+commit 1bea49eb4b7a94ab6222f9c3c40320cbdb247b2d
+Merge: 7aa3631 70e72e5
+Author: Dominik Röttsches <d-r at roettsches.de>
+Date:   Wed Jun 29 12:10:41 2016 +0200
+
+    Merge branch 'master' into conflictingFontFix
+
+commit 70e72e5f61d73c33d3c8f3bf07f5a9afd0db046a
+Author: Behdad Esfahbod <behdad at behdad.org>
+Date:   Tue Jun 28 21:00:37 2016 -0700
+
+    [gobject] Fix a few warnings
+
+    Part of https://github.com/behdad/harfbuzz/issues/277
+
+ src/hb-buffer.cc         |  2 +-
+ src/hb-gobject-structs.h | 12 ++++++++++++
+ src/hb-shape.cc          |  2 --
+ src/hb-unicode.h         | 15 ---------------
+ 4 files changed, 13 insertions(+), 18 deletions(-)
+
+commit d8273aac19771033c5064a2f079c29d09a86e7c0
+Merge: abae93f ae9054c
+Author: Behdad Esfahbod <behdad at behdad.org>
+Date:   Tue Jun 28 21:15:28 2016 -0700
+
+    Merge pull request #280 from behdad/revert-271-patch-2
+
+    Revert "use utf32"
+
+commit ae9054c740631e36b7582b44c5afb42ff4509461
+Author: Behdad Esfahbod <behdad at behdad.org>
+Date:   Tue Jun 28 21:14:38 2016 -0700
+
+    Revert "use utf32"
+
+ src/sample.py | 3 +--
+ 1 file changed, 1 insertion(+), 2 deletions(-)
+
+commit 7aa3631dd06af74a1fa9f0bfaa5f721876be817f
+Merge: f7da048 abae93f
+Author: Dominik Röttsches <d-r at roettsches.de>
+Date:   Tue Jun 28 09:52:18 2016 +0200
+
+    Merge branch 'master' into conflictingFontFix
+
+commit abae93faef32562f34a72981d252c848cc4f7565
+Merge: 07461d0 8179ff5
+Author: Behdad Esfahbod <behdad at behdad.org>
+Date:   Mon Jun 27 14:33:27 2016 -0400
+
+    Merge pull request #273 from ebraminio/master
+
+	[dwrite] Use stream font loader instead GDI interop
+
+commit 8179ff5d7ba4a140cf6743729a22072800e98a79
+Author: Ebrahim Byagowi <ebrahim at gnu.org>
+Date:	Mon Jun 27 03:54:15 2016 +0430
+
+    [dwrite] Don't allocate more than needed
+
+    Addressing Nikolay Sivov reviews on harfbuzz mailing list
+
+ src/hb-directwrite.cc | 15 ++++++---------
+ 1 file changed, 6 insertions(+), 9 deletions(-)
+
+commit 07b724f3419a28c479cd8a75ae0eecb841a6d2f3
+Author: Ebrahim Byagowi <ebrahim at gnu.org>
+Date:	Fri Jun 24 12:23:25 2016 +0430
+
+    [dwrite] Delete remained objects
+
+    No longer noticeable memory increase on create/destroy iterations,
+    highly better than current state of uniscribe backend
+
+ src/hb-directwrite.cc | 33 ++++++++++++++++++++++++---------
+ 1 file changed, 24 insertions(+), 9 deletions(-)
+
+commit be565d17141818e006aa1e4582f3ae14c726fa85
+Author: Ebrahim Byagowi <ebrahim at gnu.org>
+Date:	Fri Jun 24 11:42:01 2016 +0430
+
+    [dwrite] Release allocated blob on face destroy
+
+    This reduces memory consumption of my iterated font create/destroy
+    cycle test
+    significantly and makes it much better than uniscribe backend even
+
+ src/hb-directwrite.cc | 5 ++++-
+ 1 file changed, 4 insertions(+), 1 deletion(-)
+
+commit f3f0ea980a359343ac0e3d359a95855c2cf7be25
+Author: Ebrahim Byagowi <ebrahim at gnu.org>
+Date:	Thu Jun 23 16:41:37 2016 +0430
+
+    [dwrite] Remove ifdefs without breaking execution on old Windows
+    versions
+
+ src/hb-directwrite.cc | 205
+ +++++++++++++++++++++++++-------------------------
+ 1 file changed, 103 insertions(+), 102 deletions(-)
+
+commit 6b861dbd8b3662d0fa0e51fad1736d72192da868
+Author: Ebrahim Byagowi <ebrahim at gnu.org>
+Date:	Tue Jun 21 13:57:26 2016 +0430
+
+    [dwrite] Use stream font loader instead GDI interop
+
+    With help of
+    https://dxr.mozilla.org/mozilla-central/source/gfx/2d/NativeFontResourceDWrite.cpp
+
+ src/hb-directwrite.cc | 350
+ +++++++++++++++++++-------------------------------
+ src/hb-directwrite.h  |   2 +-
+ 2 files changed, 135 insertions(+), 217 deletions(-)
+
+commit f7da0486ed8884481d477ce08fcf928c4da9a0a3
+Merge: a022327 07461d0
+Author: Dominik Röttsches <d-r at roettsches.de>
+Date:	Mon Jun 20 10:25:43 2016 +0300
+
+    Merge branch 'master' into conflictingFontFix
+
+commit 07461d06d242cd5cfda7ccb891189f074a89b460
+Author: Kelvin <kelvinsthirteen at gmail.com>
+Date:	Sat Jun 18 22:46:38 2016 +0000
+
+    Use UTF-32	in Python sample
+
+ src/sample.py | 3 ++-
+ 1 file changed, 2 insertions(+), 1 deletion(-)
+
+commit fca0c61d67aa309fc824fb18f247493c2b7701ef
+Merge: 4b8de1e 9883505
+Author: Khaled Hosny <khaledhosny at eglug.org>
+Date:	Sun Jun 19 00:08:51 2016 +0300
+
+    Merge pull request #270 from khaledhosny/travis-failure
+
+    Fix make check on Travis
+
+commit 988350586f607c7a46bbb658a2abecfd004f41fb
+Author: Khaled Hosny <khaledhosny at eglug.org>
+Date:	Sat Jun 18 21:12:19 2016 +0200
+
+    [tests] Workaround Python 2 “narrow” builds
+
+    The so-called Python 2 “narrow” builds support UCS2 only, this
+    is a
+    workaround to allow unichr to work with any Unicode character in such
+    builds. This fixes Travis-CI failure as it has narrow Python 2 builds.
+
+    Copied from:
+    https://github.com/behdad/fonttools/blob/master/Lib/fontTools/misc/py23.py
+
+ test/shaping/hb_test_tools.py | 38 +++++++++++++++++++++++++++++++++++++-
+ 1 file changed, 37 insertions(+), 1 deletion(-)
+
+commit a0223274b97e82fe02730fd45729172511fec459
+Author: Dominik Röttsches <drott at chromium.org>
+Date:	Thu Jun 16 14:19:39 2016 +0200
+
+    Discard reconfigured CTFont if URL changes
+
+    Fixes https://github.com/behdad/harfbuzz/issues/267
+
+ src/hb-coretext.cc | 24 +++++++++++++++++++++---
+ 1 file changed, 21 insertions(+), 3 deletions(-)
+
+commit 4b8de1ea804b225e8357422d0686aad76b05ccf3
+Author: Behdad Esfahbod <behdad at behdad.org>
+Date:	Mon Jun 6 23:08:54 2016 -0700
+
+    Round, not truncate, when scaling values
+
+    Fixes https://github.com/behdad/harfbuzz/issues/255
+
+ src/hb-font-private.hh | 8 +++++++-
+ 1 file changed, 7 insertions(+), 1 deletion(-)
+
+commit a93078a0ece6dcdea8c5b46cabd30854dd7cf593
+Author: Behdad Esfahbod <behdad at behdad.org>
+Date:	Mon Jun 6 15:58:41 2016 -0700
+
+    Change bugreport URL to github
+
+    That's where everything is happening these days.
+
+ configure.ac | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+commit bed201d2b839c1b1e727e17efc2e0c8f705b86c5
+Author: Behdad Esfahbod <behdad at behdad.org>
+Date:	Mon Jun 6 14:14:24 2016 -0700
+
+    Update for latest Unicode 9 data files
+
+ src/hb-ot-shape-complex-indic-table.cc | 10 +++++-----
+ src/hb-ot-shape-complex-indic.cc	|  5 -----
+ src/hb-ot-shape-complex-use-table.cc	|  4 ++--
+ 3 files changed, 7 insertions(+), 12 deletions(-)
+
+commit aba4b0ca52f490adfc2f3c6ec0accddd6596fdf6
+Author: Behdad Esfahbod <behdad at behdad.org>
+Date:	Wed Jun 1 16:57:29 2016 -0700
+
+    Add TODO
+
+ src/hb-font.cc | 1 +
+ 1 file changed, 1 insertion(+)
+
+commit a2b03de5b30b7e83f7fbf3457e9ba9c00eb88d00
+Author: Behdad Esfahbod <behdad at behdad.org>
+Date:	Fri May 6 17:56:07 2016 +0100
+
+    [myanmar] Handle U+AA74..U+AA76
+
+    Fixes https://github.com/behdad/harfbuzz/issues/218
+
+ src/hb-ot-shape-complex-myanmar.cc | 5 +++++
+ 1 file changed, 5 insertions(+)
+
+commit 6c0aa9e92bbd22011c85d98c6db021012f7b4101
+Author: Behdad Esfahbod <behdad at behdad.org>
+Date:	Fri May 6 17:50:06 2016 +0100
+
+    Fix build on droid.io
+
+ test/shaping/tests/use.tests | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+commit 9b6312f9451db790db00dc2c2e27a5a1db852e72
+Author: Behdad Esfahbod <behdad at behdad.org>
+Date:	Fri May 6 17:41:49 2016 +0100
+
+    [use] Update to draft spec from Andrew Glass from August 2015
+
+ src/gen-use-table.py				    |  29 +++--
+ src/hb-ot-shape-complex-use-machine.rl		    |  15 +--
+ src/hb-ot-shape-complex-use-private.hh		    |	1 -
+ src/hb-ot-shape-complex-use-table.cc		    | 142
+ ++++++++++-----------
+ src/hb-ot-shape-complex-use.cc			    |  11 +-
+ .../6ff0fbead4462d9f229167b4e6839eceb8465058.ttf   | Bin 0 -> 1148 bytes
+ test/shaping/tests/use.tests			    |	1 +
+ 7 files changed, 93 insertions(+), 106 deletions(-)
+
+commit 3e4e7616a8ca80a50a438601b84428b4ba4c8694
+Author: Behdad Esfahbod <behdad at behdad.org>
+Date:	Fri May 6 17:28:25 2016 +0100
+
+    [use] Add a catch-all clause to the machine
+
+ src/hb-ot-shape-complex-use-machine.rl | 2 ++
+ src/hb-ot-shape-complex-use.cc		| 2 ++
+ 2 files changed, 4 insertions(+)
+
+commit d04e461fe3310ccaf8633efcb79b8eb6ca2201c3
+Author: Behdad Esfahbod <behdad at behdad.org>
+Date:	Fri May 6 17:17:00 2016 +0100
+
+    [use] Fix 'Number-joiner terminated cluster' to use HN instead of H
+
+    From draft update to USE.
+
+ src/hb-ot-shape-complex-use-machine.rl | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+commit 359dead960c825edeb4587915a511d323f1c1f2a
+Author: Behdad Esfahbod <behdad at behdad.org>
+Date:	Fri May 6 16:19:19 2016 +0100
+
+    Allow MultipleSubst to delete glyph
+
+    Fixes https://github.com/behdad/harfbuzz/issues/253
+
+    Hopefully we got the logic right.
+
+ src/hb-ot-layout-gsub-table.hh       | 17 +++++++----------
+ src/hb-ot-layout-gsubgpos-private.hh | 11 +++++++----
+ 2 files changed, 14 insertions(+), 14 deletions(-)
+
+commit 3c1666cfb589275de96d54eecb95a13a98e3819e
+Author: Behdad Esfahbod <behdad at behdad.org>
+Date:	Fri May 6 16:05:07 2016 +0100
+
+    [indic] Remove more unused logic after Javanese is gone
+
+ src/hb-ot-shape-complex-indic.cc | 50
+ +++++++++++++++-------------------------
+ 1 file changed, 18 insertions(+), 32 deletions(-)
+
+commit 8b5d6e755b271d0d22b31a7726d5bfbf2aae8b2f
+Author: Behdad Esfahbod <behdad at behdad.org>
+Date:	Fri May 6 15:59:27 2016 +0100
+
+    [indic] Remove unused Javanese bits
+
+ src/hb-ot-shape-complex-indic-machine.rl | 3 +--
+ src/hb-ot-shape-complex-indic-private.hh | 5 ++---
+ src/hb-ot-shape-complex-indic.cc	  | 4 ----
+ 3 files changed, 3 insertions(+), 9 deletions(-)
+
+commit 30e6e29f0f0f77eb65bfd1c4576b38c2da555017
+Author: Behdad Esfahbod <behdad at behdad.org>
+Date:	Fri May 6 15:52:27 2016 +0100
+
+    [indic/use] Move Javanese from Indic shaper to USE
+
+    Fixes https://github.com/behdad/harfbuzz/issues/243
+
+    With javatext.ttf, the reodering medial Ra gets its advance width
+    zero'ed in Uniscribe implementation, and the font adds the advance
+    back.  Our Indic shaper does not do that, but USE does.  So, route
+    Javanese through USE.  That's what Microsoft does anyway.  Test:
+
+      U+A9A5,U+A9BA
+
+    This also seems to fix the following sequence, and variations thereof:
+
+      U+A99F,U+A9C0,U+A9A2,U+A9BF
+
+ src/gen-indic-table.py				    |  1 -
+ src/hb-ot-shape-complex-indic-table.cc		    | 23
+ ++++------------------
+ src/hb-ot-shape-complex-private.hh		    |  5 +----
+ .../south-east-asian/script-javanese/misc.txt	    |  1 +
+ 4 files changed, 6 insertions(+), 24 deletions(-)
+
+commit c6ee5f5f06a27a6f147f63aaf51186622821f20b
+Author: Behdad Esfahbod <behdad at behdad.org>
+Date:	Fri May 6 15:39:02 2016 +0100
+
+    Add Javanese sample text
+
+ .../south-east-asian/script-javanese/misc.txt	    | 53
+ ++++++++++++++++++++++
+ 1 file changed, 53 insertions(+)
+
+commit e21921a68a959b7e929f71a4260a6cbe055ab4e6
+Author: Behdad Esfahbod <behdad at behdad.org>
+Date:	Fri May 6 15:24:39 2016 +0100
+
+    Minor
+
+ BUILD.md | 9 ++++++---
+ 1 file changed, 6 insertions(+), 3 deletions(-)
+
+commit 01a30a6aa9a5827c93245961e3392a1f361745fe
+Author: Behdad Esfahbod <behdad at behdad.org>
+Date:	Fri May 6 11:50:02 2016 +0100
+
+    [indic] Remove data for scripts that don't go thorough this shaper
+
+ src/gen-indic-table.py			|  29 +-
+ src/hb-ot-shape-complex-indic-table.cc | 604
+ +--------------------------------
+ 2 files changed, 43 insertions(+), 590 deletions(-)
+
+commit 7cd9269f4eba7b85cd72301a3fc39fab42a4e439
+Author: Behdad Esfahbod <behdad at behdad.org>
+Date:	Fri May 6 11:34:46 2016 +0100
+
+    Update tables to Unicode 9.0.0 beta
+
+    Fixes https://github.com/behdad/harfbuzz/issues/251
+
+ src/hb-ot-shape-complex-arabic-table.hh |  56 ++++++++-----
+ src/hb-ot-shape-complex-indic-table.cc  | 137
+ +++++++++++++++++++++++---------
+ src/hb-ot-shape-complex-use-table.cc	 |  86 ++++++++++++++------
+ 3 files changed, 196 insertions(+), 83 deletions(-)
+
+commit f718fe370ea89e8aeb407addaa6cc926d52a4cdb
+Author: Behdad Esfahbod <behdad at behdad.org>
+Date:	Fri May 6 11:21:12 2016 +0100
+
+    Minor
+
+ src/gen-indic-table.py | 4 ++--
+ 1 file changed, 2 insertions(+), 2 deletions(-)
+
+commit 691086f131cb6c9d97e98730c27673484bf93f87
+Author: Behdad Esfahbod <behdad at behdad.org>
+Date:	Fri May 6 12:08:18 2016 +0100
+
+    Add Unicode 9 beta scripts
+
+    These are frozen, so good time to add.
+
+ src/hb-common.cc		    | 3 +++
+ src/hb-common.h		    | 9 +++++++++
+ src/hb-ot-shape-complex-private.hh | 9 +++++++++
+ src/hb-ot-shape-complex-use.cc     | 3 +++
+ 4 files changed, 24 insertions(+)
+
+commit bc5198fe1277d662926a4f616913c085cd4fc8ee
+Author: Behdad Esfahbod <behdad at behdad.org>
+Date:	Fri May 6 11:59:05 2016 +0100
+
+    Whitespace
+
+ src/hb-common.h | 13 +++++++------
+ 1 file changed, 7 insertions(+), 6 deletions(-)
+
+commit a5b7b0dd4508d8a1e7573b75c4cb8832c9e34e3f
+Author: Behdad Esfahbod <behdad at behdad.org>
+Date:	Mon May 2 10:44:13 2016 +0200
+
+    1.2.7
+
+ NEWS	      | 12 ++++++++++++
+ configure.ac |  2 +-
+ 2 files changed, 13 insertions(+), 1 deletion(-)
+
 commit 9879fc1db3cad684f412c2f3d6b49e0435697d0e
 Author: Behdad Esfahbod <behdad at behdad.org>
-Date:   Mon May 2 10:29:12 2016 +0200
+Date:	Mon May 2 10:29:12 2016 +0200
 
     [ot-font] Remove unused 'post' table include for now
 
@@ -11,11 +584,11 @@
 
 commit f8061ae7972462ad800c23be7cd7b3d7ab94b93b
 Author: Behdad Esfahbod <behdad at behdad.org>
-Date:   Mon May 2 10:28:24 2016 +0200
+Date:	Mon May 2 10:28:24 2016 +0200
 
     [tests] Fix test
 
- test/shaping/Makefile.am                                                |
+ test/shaping/Makefile.am						 |
  2 +-
  .../tests/{fallback-positioning.test => fallback-positioning.tests}
  | 0
@@ -23,7 +596,7 @@
 
 commit f00ab2a33ab34ba64f38cbbe65830c770a3e071e
 Author: Behdad Esfahbod <behdad at behdad.org>
-Date:   Mon May 2 10:24:00 2016 +0200
+Date:	Mon May 2 10:24:00 2016 +0200
 
     [hb-ot-font] Make 'glyf' table loading lazy
 
@@ -33,22 +606,22 @@
     positioning
     happens.
 
- src/hb-ot-font.cc                                  |  45
+ src/hb-ot-font.cc				    |  45
  ++++++++++++++++++++-
- test/shaping/Makefile.am                           |   1 +
+ test/shaping/Makefile.am			    |	1 +
  .../7ef276fc886ea502a03b9b0e5c8b547d5dc2b61c.ttf   | Bin 0 -> 784 bytes
- test/shaping/tests/fallback-positioning.test       |   2 +
+ test/shaping/tests/fallback-positioning.test	    |	2 +
  4 files changed, 46 insertions(+), 2 deletions(-)
 
 commit 587d46227a56940a7f5bb053cbeda6144394acf7
 Author: Behdad Esfahbod <behdad at behdad.org>
-Date:   Sat Apr 30 19:20:56 2016 +0200
+Date:	Sat Apr 30 19:20:56 2016 +0200
 
     [ot-font] Start implementing 'post' table, for accessing glyph names
 
- src/Makefile.sources        |   1 +
- src/hb-open-type-private.hh |  12 ++++-
- src/hb-ot-font.cc           |   1 +
+ src/Makefile.sources	     |	 1 +
+ src/hb-open-type-private.hh |	12 ++++-
+ src/hb-ot-font.cc	     |	 1 +
  src/hb-ot-post-table.hh     | 119
  ++++++++++++++++++++++++++++++++++++++++++++
  4 files changed, 132 insertions(+), 1 deletion(-)
@@ -56,13 +629,13 @@
 commit 9abaaac409b8e3a0a9182b67dc384133013f7878
 Merge: 2f560ee 264b7a7
 Author: Behdad Esfahbod <behdad at behdad.org>
-Date:   Wed Apr 27 03:38:24 2016 -0700
+Date:	Wed Apr 27 03:38:24 2016 -0700
 
     Merge commit '264b7a728a41becfbf23ce258fc2a3af19d0cbbe' into HEAD
 
 commit 2f560ee44b7b08683e8e6955fe3b95187e8bda32
 Author: Behdad Esfahbod <behdad at behdad.org>
-Date:   Wed Apr 27 03:11:41 2016 -0700
+Date:	Wed Apr 27 03:11:41 2016 -0700
 
     [tibetan] Reorder marks to better match Uniscribe
 
@@ -77,13 +650,13 @@
 
 commit f68390f196216718c22c434e1d8921118e646824
 Author: Behdad Esfahbod <behdad at behdad.org>
-Date:   Wed Apr 27 02:44:35 2016 -0700
+Date:	Wed Apr 27 02:44:35 2016 -0700
 
     [test] Add text for Tibetan shorthand contractions
 
     From http://www.babelstone.co.uk/Tibetan/Contractions.html
 
- .../script-tibetan/misc/contractions.txt           | 612
+ .../script-tibetan/misc/contractions.txt	    | 612
  +++++++++++++++++++++
  1 file changed, 612 insertions(+)
 
@@ -90,7 +663,7 @@
 commit 264b7a728a41becfbf23ce258fc2a3af19d0cbbe
 Merge: 7e2da03 adafdcd
 Author: Khaled Hosny <khaledhosny at eglug.org>
-Date:   Wed Apr 27 03:48:23 2016 +0300
+Date:	Wed Apr 27 03:48:23 2016 +0300
 
     Merge pull request #247 from khaledhosny/update-opentype-language-tags
 
@@ -98,7 +671,7 @@
 
 commit adafdcddced076da4bfa3114a00e15a387aaf1f7
 Author: Arthur Reutenauer <arthur.reutenauer at normalesup.org>
-Date:   Sat Nov 7 23:37:21 2015 +0000
+Date:	Sat Nov 7 23:37:21 2015 +0000
 
     Mass-added “difficult” tags – to be curated.
 
@@ -108,7 +681,7 @@
 
 commit 3d6a2c0d7d9f6c5b3097f78c1123f9e59dcc76e2
 Author: Arthur Reutenauer <arthur.reutenauer at normalesup.org>
-Date:   Sat Nov 7 22:59:13 2015 +0000
+Date:	Sat Nov 7 22:59:13 2015 +0000
 
     Initial import of missing OpenType 1.7 language tags.
 
@@ -118,7 +691,7 @@
 
 commit 7e2da035f68e46ce8f4759b67b4ed3a1b211d793
 Author: Behdad Esfahbod <behdad at behdad.org>
-Date:   Tue Apr 26 16:42:25 2016 -0700
+Date:	Tue Apr 26 16:42:25 2016 -0700
 
     Undo accidental change
 
@@ -127,23 +700,23 @@
 
 commit b20305022a8235b19e6b640bc62651854e1336f1
 Author: Behdad Esfahbod <behdad at behdad.org>
-Date:   Tue Apr 26 16:41:17 2016 -0700
+Date:	Tue Apr 26 16:41:17 2016 -0700
 
     Do NOT ignore Mongolian Free Variation Selectors during matching
 
     Fixes https://github.com/behdad/harfbuzz/issues/234
 
- src/hb-ot-layout-gsubgpos-private.hh               |   2 +-
- src/hb-ot-layout-private.hh                        |  23
+ src/hb-ot-layout-gsubgpos-private.hh		    |	2 +-
+ src/hb-ot-layout-private.hh			    |  23
  +++++++++++++++++++--
- src/hb-ot-shape-complex-arabic.cc                  |   2 +-
+ src/hb-ot-shape-complex-arabic.cc		    |	2 +-
  .../a34a7b00f22ffb5fd7eef6933b81c7e71bc2cdfb.ttf   | Bin 0 -> 3700 bytes
- .../tests/mongolian-variation-selector.tests       |   1 +
+ .../tests/mongolian-variation-selector.tests	    |	1 +
  5 files changed, 24 insertions(+), 4 deletions(-)
 
 commit 21ab5501f5f5267d20cf23256866dd9d82a667ef
 Author: Behdad Esfahbod <behdad at behdad.org>
-Date:   Tue Apr 26 16:02:04 2016 -0700
+Date:	Tue Apr 26 16:02:04 2016 -0700
 
     Move ZWJ/ZWNJ bits to top byte of unicode_props()
 
@@ -155,7 +728,7 @@
 
 commit de508516cb06ddb064d75bd7be8e843a5ebcf70d
 Author: Behdad Esfahbod <behdad at behdad.org>
-Date:   Tue Apr 26 11:28:37 2016 -0700
+Date:	Tue Apr 26 11:28:37 2016 -0700
 
     [util] Print out --debug buffer to stderr
 
@@ -164,7 +737,7 @@
 
 commit 29393884b9f045460fb65d6ad10a94461ba93430
 Author: Behdad Esfahbod <behdad at behdad.org>
-Date:   Tue Apr 26 10:35:23 2016 -0700
+Date:	Tue Apr 26 10:35:23 2016 -0700
 
     Annotate blacklisted fonts with their sha1sum
 
@@ -174,7 +747,7 @@
 commit 14bb4a56971fd45063cd6c1288d911627088abb2
 Merge: 1c625df 5069062
 Author: Sascha Brawer <sascha at brawer.ch>
-Date:   Tue Apr 26 11:38:16 2016 +0200
+Date:	Tue Apr 26 11:38:16 2016 +0200
 
     Merge pull request #245 from KonstantinRitt/fixes/ce
 
@@ -182,7 +755,7 @@
 
 commit 5069062d0a9342bb716eebf3ddc1efad91924caa
 Author: Konstantin Ritt <ritt.ks at gmail.com>
-Date:   Tue Apr 26 12:02:26 2016 +0400
+Date:	Tue Apr 26 12:02:26 2016 +0400
 
     Unbreak build on Windows CE
 
@@ -194,7 +767,7 @@
 
 commit 1c625dff2269c54ff429ca45be88893ff1fa6c34
 Author: Behdad Esfahbod <behdad at behdad.org>
-Date:   Sat Apr 9 12:53:23 2016 -0700
+Date:	Sat Apr 9 12:53:23 2016 -0700
 
     Minor
 
@@ -203,7 +776,7 @@
 
 commit 851b0db36d1b724fc1e0db506445119c78186285
 Author: Behdad Esfahbod <behdad at behdad.org>
-Date:   Fri Apr 8 23:46:55 2016 -0700
+Date:	Fri Apr 8 23:46:55 2016 -0700
 
     Minor.  We should never get to this branch, but fix it anyway.
 
@@ -212,17 +785,17 @@
 
 commit 00ea66f35754a1e6e4d3b7b139d611a9a623a9d1
 Author: Behdad Esfahbod <behdad at behdad.org>
-Date:   Fri Apr 8 13:51:01 2016 -0700
+Date:	Fri Apr 8 13:51:01 2016 -0700
 
     1.2.6
 
- NEWS         | 10 ++++++++++
+ NEWS	      | 10 ++++++++++
  configure.ac |  2 +-
  2 files changed, 11 insertions(+), 1 deletion(-)
 
 commit 4f3d59a1877dcb94d09da48e9694a6c1b05a86fe
 Author: Behdad Esfahbod <behdad at behdad.org>
-Date:   Fri Apr 8 13:41:20 2016 -0700
+Date:	Fri Apr 8 13:41:20 2016 -0700
 
     Blacklist another set of timesi.ttf and timesbi.ttf
 
@@ -232,7 +805,7 @@
 commit ef476be80d773332e0c768a3465d99381d76edd9
 Merge: a0331b5 d3134a6
 Author: Behdad Esfahbod <behdad at behdad.org>
-Date:   Fri Apr 8 13:16:33 2016 -0700
+Date:	Fri Apr 8 13:16:33 2016 -0700
 
     Merge pull request #239 from ebraminio/dwfix
 
@@ -240,7 +813,7 @@
 
 commit d3134a66ad551ded726db9528d3c25459088f105
 Author: Ebrahim Byagowi <ebrahim at gnu.org>
-Date:   Tue Apr 5 21:01:05 2016 +0000
+Date:	Tue Apr 5 21:01:05 2016 +0000
 
     Fix when no feature is given
 
@@ -249,29 +822,29 @@
 
 commit a0331b55f7b45437980e1fc323251f4091bf2c4e
 Author: Behdad Esfahbod <behdad at behdad.org>
-Date:   Mon Apr 4 16:25:32 2016 -0700
+Date:	Mon Apr 4 16:25:32 2016 -0700
 
     1.2.5
 
- NEWS         | 7 +++++++
+ NEWS	      | 7 +++++++
  configure.ac | 2 +-
  2 files changed, 8 insertions(+), 1 deletion(-)
 
 commit 6e55199b5f097ac93bad38f32e9813e2da14c5a7
 Author: Behdad Esfahbod <behdad at behdad.org>
-Date:   Mon Apr 4 16:24:27 2016 -0700
+Date:	Mon Apr 4 16:24:27 2016 -0700
 
     Add test for 6dd80faf0dcb3e8a8915c3a25da44e2a67cb0cd8
 
- test/shaping/Makefile.am                                |   1 +
- .../f22416c692720a7d46fadf4af99f4c9e094f00b9.ttf        | Bin 0 ->
+ test/shaping/Makefile.am				 |   1 +
+ .../f22416c692720a7d46fadf4af99f4c9e094f00b9.ttf	 | Bin 0 ->
  16736 bytes
- test/shaping/tests/mark-filtering-sets.tests            |   5 +++++
+ test/shaping/tests/mark-filtering-sets.tests		 |   5 +++++
  3 files changed, 6 insertions(+)
 
 commit 59089622dbb8dda783b1639c932123f125c3592d
 Author: Behdad Esfahbod <behdad at behdad.org>
-Date:   Mon Apr 4 14:54:32 2016 -0700
+Date:	Mon Apr 4 14:54:32 2016 -0700
 
     [coretext] Clarify comment
 
@@ -280,7 +853,7 @@
 
 commit 6dd80faf0dcb3e8a8915c3a25da44e2a67cb0cd8
 Author: Behdad Esfahbod <behdad at behdad.org>
-Date:   Mon Apr 4 14:34:25 2016 -0700
+Date:	Mon Apr 4 14:34:25 2016 -0700
 
     Fix FixedVersion::to_int()
 
@@ -294,7 +867,7 @@
 
 commit 4a104021697439fd21390a1f4cdc9310348882fa
 Author: Ebrahim Byagowi <ebrahim at gnu.org>
-Date:   Sat Apr 2 13:47:59 2016 +0000
+Date:	Sat Apr 2 13:47:59 2016 +0000
 
     Hide justification behind HB_DIRECTWRITE_EXPERIMENTAL_JUSTIFICATION
 
@@ -303,7 +876,7 @@
 
 commit 63ee9ca5d81b53eb035972754ed95572821c393c
 Author: Ebrahim Byagowi <ebrahim at gnu.org>
-Date:   Fri Apr 1 15:47:07 2016 +0000
+Date:	Fri Apr 1 15:47:07 2016 +0000
 
     Use standard types instead Windows favourites ones
 
@@ -313,7 +886,7 @@
 
 commit adf20ba0d18d1506e633dcd9b4827a6c93abcadd
 Author: Ebrahim Byagowi <ebrahim at gnu.org>
-Date:   Fri Apr 1 15:36:40 2016 +0000
+Date:	Fri Apr 1 15:36:40 2016 +0000
 
     Limit GetJustifiedGlyphs only to scripts with custom justification
     character
@@ -324,7 +897,7 @@
 
 commit 32ae9d1b3ffbe7e26e654437a56a26a95fe9f5a6
 Author: Ebrahim Byagowi <ebrahim at gnu.org>
-Date:   Fri Apr 1 06:39:57 2016 +0000
+Date:	Fri Apr 1 06:39:57 2016 +0000
 
     Add justification support
 
@@ -334,7 +907,7 @@
 
 commit 10c3d9e41520595c88dd2a8321590e03ce8fcf47
 Author: Ebrahim Byagowi <ebrahim at gnu.org>
-Date:   Thu Mar 31 18:19:44 2016 +0000
+Date:	Thu Mar 31 18:19:44 2016 +0000
 
     Basic opentype features support
 
@@ -344,7 +917,7 @@
 
 commit d129897120d3ad414220d603557c15a60aa69fa6
 Author: Ebrahim Byagowi <ebrahim at gnu.org>
-Date:   Thu Mar 31 13:45:37 2016 +0000
+Date:	Thu Mar 31 13:45:37 2016 +0000
 
     Refactor and remove dupe getglyphs call
 
@@ -354,7 +927,7 @@
 
 commit 5f1a8961008b93f72acc47336109af3a64e248d0
 Author: Ebrahim Byagowi <ebrahim at gnu.org>
-Date:   Thu Mar 31 12:26:16 2016 +0000
+Date:	Thu Mar 31 12:26:16 2016 +0000
 
     Better glyph offset support
 
@@ -363,7 +936,7 @@
 
 commit d691ba3f405738c6857450752b8cc0911dfcdb01
 Author: Ebrahim Byagowi <ebrahim at gnu.org>
-Date:   Wed Mar 30 20:21:40 2016 +0000
+Date:	Wed Mar 30 20:21:40 2016 +0000
 
     Don't fail when language is not set
 
@@ -372,7 +945,7 @@
 
 commit 1c00a46c7a608ebc0b03c5abfcfe7f2b9881d0df
 Author: Ebrahim Byagowi <ebrahim at gnu.org>
-Date:   Wed Mar 30 20:15:09 2016 +0000
+Date:	Wed Mar 30 20:15:09 2016 +0000
 
     Make DirectWrite backend to work with different font sizes
 
@@ -383,17 +956,17 @@
 
 commit 0251b0cc5c39272d2299d4b2ab802faaafe96837
 Author: Behdad Esfahbod <behdad at behdad.org>
-Date:   Thu Mar 17 14:37:11 2016 -0700
+Date:	Thu Mar 17 14:37:11 2016 -0700
 
     1.2.4
 
- NEWS         | 15 +++++++++++++++
+ NEWS	      | 15 +++++++++++++++
  configure.ac |  2 +-
  2 files changed, 16 insertions(+), 1 deletion(-)
 
 commit 69f9fbc4200442a35484d3c790ae8f4979be5d60
 Author: Behdad Esfahbod <behdad at behdad.org>
-Date:   Thu Mar 17 11:59:43 2016 -0700
+Date:	Thu Mar 17 11:59:43 2016 -0700
 
     Synthesize GDEF glyph class for any glyph that does not have one
     in GDEF

Modified: trunk/Build/source/libs/harfbuzz/harfbuzz-src/NEWS
===================================================================
--- trunk/Build/source/libs/harfbuzz/harfbuzz-src/NEWS	2016-07-21 23:20:53 UTC (rev 41747)
+++ trunk/Build/source/libs/harfbuzz/harfbuzz-src/NEWS	2016-07-21 23:35:31 UTC (rev 41748)
@@ -1,3 +1,18 @@
+Overview of changes leading to 1.3.0
+Thursday, July 21, 2016
+====================================
+
+- Update to Unicode 9.0.0
+- Move Javanese from Indic shaper to Universal Shaping Engine.
+- Allow MultipleSubst to delete a glyph (matching Windows engine).
+- Update Universal Shaping Engine to latest draft from Microsoft.
+- DirectWrite backend improvements.  Note: this backend is for testing ONLY.
+- CoreText backend improvements with unreachable fonts.
+- Implement symbol fonts (cmap 3.0.0) in hb-ft and hb-ot-font.
+- Blacklist bad GDEF of more fonts (Tahoma & others).
+- Misc fixes.
+
+
 Overview of changes leading to 1.2.7
 Monday, May 2, 2016
 ====================================

Modified: trunk/Build/source/libs/harfbuzz/harfbuzz-src/configure.ac
===================================================================
--- trunk/Build/source/libs/harfbuzz/harfbuzz-src/configure.ac	2016-07-21 23:20:53 UTC (rev 41747)
+++ trunk/Build/source/libs/harfbuzz/harfbuzz-src/configure.ac	2016-07-21 23:35:31 UTC (rev 41748)
@@ -1,7 +1,7 @@
 AC_PREREQ([2.64])
 AC_INIT([HarfBuzz],
-        [1.2.7],
-        [http://bugs.freedesktop.org/enter_bug.cgi?product=harfbuzz],
+        [1.3.0],
+        [https://github.com/behdad/harfbuzz/issues/new],
         [harfbuzz],
         [http://harfbuzz.org/])
 

Modified: trunk/Build/source/libs/harfbuzz/harfbuzz-src/src/gen-indic-table.py
===================================================================
--- trunk/Build/source/libs/harfbuzz/harfbuzz-src/src/gen-indic-table.py	2016-07-21 23:20:53 UTC (rev 41747)
+++ trunk/Build/source/libs/harfbuzz/harfbuzz-src/src/gen-indic-table.py	2016-07-21 23:35:31 UTC (rev 41748)
@@ -3,10 +3,32 @@
 import sys
 
 if len (sys.argv) != 4:
-	print >>sys.stderr, "usage: ./gen-indic-table.py IndicSyllabicCategory.txt IndicMatraCategory.txt Blocks.txt"
+	print >>sys.stderr, "usage: ./gen-indic-table.py IndicSyllabicCategory.txt IndicPositionalCategory.txt Blocks.txt"
 	sys.exit (1)
 
-BLACKLISTED_BLOCKS = ["Thai", "Lao", "Tibetan"]
+ALLOWED_SINGLES = [0x00A0, 0x25CC]
+ALLOWED_BLOCKS = [
+	'Basic Latin',
+	'Latin-1 Supplement',
+	'Devanagari',
+	'Bengali',
+	'Gurmukhi',
+	'Gujarati',
+	'Oriya',
+	'Tamil',
+	'Telugu',
+	'Kannada',
+	'Malayalam',
+	'Sinhala',
+	'Myanmar',
+	'Khmer',
+	'Vedic Extensions',
+	'General Punctuation',
+	'Superscripts and Subscripts',
+	'Devanagari Extended',
+	'Myanmar Extended-B',
+	'Myanmar Extended-A',
+]
 
 files = [file (x) for x in sys.argv[1:]]
 
@@ -50,7 +72,7 @@
 		if not u in combined:
 			combined[u] = list (defaults)
 		combined[u][i] = v
-combined = {k:v for k,v in combined.items() if v[2] not in BLACKLISTED_BLOCKS}
+combined = {k:v for k,v in combined.items() if k in ALLOWED_SINGLES or v[2] in ALLOWED_BLOCKS}
 data = combined
 del combined
 num = len (data)
@@ -61,7 +83,7 @@
 
 # Move the outliers NO-BREAK SPACE and DOTTED CIRCLE out
 singles = {}
-for u in [0x00A0, 0x25CC]:
+for u in ALLOWED_SINGLES:
 	singles[u] = data[u]
 	del data[u]
 
@@ -69,7 +91,7 @@
 print "/*"
 print " * The following table is generated by running:"
 print " *"
-print " *   ./gen-indic-table.py IndicSyllabicCategory.txt IndicMatraCategory.txt Blocks.txt"
+print " *   ./gen-indic-table.py IndicSyllabicCategory.txt IndicPositionalCategory.txt Blocks.txt"
 print " *"
 print " * on files with these headers:"
 print " *"

Modified: trunk/Build/source/libs/harfbuzz/harfbuzz-src/src/gen-use-table.py
===================================================================
--- trunk/Build/source/libs/harfbuzz/harfbuzz-src/src/gen-use-table.py	2016-07-21 23:20:53 UTC (rev 41747)
+++ trunk/Build/source/libs/harfbuzz/harfbuzz-src/src/gen-use-table.py	2016-07-21 23:35:31 UTC (rev 41748)
@@ -144,22 +144,24 @@
 
 def is_BASE(U, UISC, UGC):
 	return (UISC in [Number, Consonant, Consonant_Head_Letter,
-			#SPEC-OUTDATED Consonant_Placeholder,
-			Tone_Letter] or
+			#SPEC-DRAFT Consonant_Placeholder,
+			Tone_Letter,
+			Vowel_Independent #SPEC-DRAFT
+			] or
 		(UGC == Lo and UISC in [Avagraha, Bindu, Consonant_Final, Consonant_Medial,
 					Consonant_Subjoined, Vowel, Vowel_Dependent]))
-def is_BASE_VOWEL(U, UISC, UGC):
-	return UISC == Vowel_Independent
 def is_BASE_IND(U, UISC, UGC):
-	#SPEC-BROKEN return (UISC in [Consonant_Dead, Modifying_Letter] or UGC == Po)
+	#SPEC-DRAFT return (UISC in [Consonant_Dead, Modifying_Letter] or UGC == Po)
 	return (UISC in [Consonant_Dead, Modifying_Letter] or
-		(UGC == Po and not is_BASE_OTHER(U, UISC, UGC))) # for 104E
+		(UGC == Po and not U in [0x104E, 0x2022]) or
+		False # SPEC-DRAFT-OUTDATED! U == 0x002D
+		)
 def is_BASE_NUM(U, UISC, UGC):
 	return UISC == Brahmi_Joining_Number
 def is_BASE_OTHER(U, UISC, UGC):
-	if UISC == Consonant_Placeholder: return True #SPEC-OUTDATED
-	return U in [0x00A0, 0x00D7, 0x2015, 0x2022, 0x25CC,
-		     0x25FB, 0x25FC, 0x25FD, 0x25FE]
+	if UISC == Consonant_Placeholder: return True #SPEC-DRAFT
+	#SPEC-DRAFT return U in [0x00A0, 0x00D7, 0x2015, 0x2022, 0x25CC, 0x25FB, 0x25FC, 0x25FD, 0x25FE]
+	return U in [0x2015, 0x2022, 0x25FB, 0x25FC, 0x25FD, 0x25FE]
 def is_CGJ(U, UISC, UGC):
 	return U == 0x034F
 def is_CONS_FINAL(U, UISC, UGC):
@@ -166,7 +168,7 @@
 	return ((UISC == Consonant_Final and UGC != Lo) or
 		UISC == Consonant_Succeeding_Repha)
 def is_CONS_FINAL_MOD(U, UISC, UGC):
-	#SPEC-OUTDATED return  UISC in [Consonant_Final_Modifier, Syllable_Modifier]
+	#SPEC-DRAFT return  UISC in [Consonant_Final_Modifier, Syllable_Modifier]
 	return  UISC == Syllable_Modifier
 def is_CONS_MED(U, UISC, UGC):
 	return UISC == Consonant_Medial and UGC != Lo
@@ -173,7 +175,7 @@
 def is_CONS_MOD(U, UISC, UGC):
 	return UISC in [Nukta, Gemination_Mark, Consonant_Killer]
 def is_CONS_SUB(U, UISC, UGC):
-	#SPEC-OUTDATED return UISC == Consonant_Subjoined
+	#SPEC-DRAFT return UISC == Consonant_Subjoined
 	return UISC == Consonant_Subjoined and UGC != Lo
 def is_HALANT(U, UISC, UGC):
 	return UISC in [Virama, Invisible_Stacker]
@@ -200,8 +202,8 @@
 	#SPEC-OUTDATED hack to categorize Consonant_With_Stacker and Consonant_Prefixed
 	return UISC in [Consonant_Preceding_Repha, Consonant_With_Stacker, Consonant_Prefixed]
 def is_SYM(U, UISC, UGC):
-	if U == 0x25CC: return False #SPEC-OUTDATED
-	#SPEC-OUTDATED return UGC in [So, Sc] or UISC == Symbol_Letter
+	if U == 0x25CC: return False #SPEC-DRAFT
+	#SPEC-DRAFT return UGC in [So, Sc] or UISC == Symbol_Letter
 	return UGC in [So, Sc]
 def is_SYM_MOD(U, UISC, UGC):
 	return U in [0x1B6B, 0x1B6C, 0x1B6D, 0x1B6E, 0x1B6F, 0x1B70, 0x1B71, 0x1B72, 0x1B73]
@@ -216,7 +218,6 @@
 
 use_mapping = {
 	'B':	is_BASE,
-	'IV':	is_BASE_VOWEL,
 	'IND':	is_BASE_IND,
 	'N':	is_BASE_NUM,
 	'GB':	is_BASE_OTHER,

Modified: trunk/Build/source/libs/harfbuzz/harfbuzz-src/src/hb-buffer.cc
===================================================================
--- trunk/Build/source/libs/harfbuzz/harfbuzz-src/src/hb-buffer.cc	2016-07-21 23:20:53 UTC (rev 41747)
+++ trunk/Build/source/libs/harfbuzz/harfbuzz-src/src/hb-buffer.cc	2016-07-21 23:35:31 UTC (rev 41748)
@@ -52,7 +52,7 @@
  *
  * Checks the equality of two #hb_segment_properties_t's.
  *
- * Return value: (transfer full):
+ * Return value:
  * %true if all properties of @a equal those of @b, false otherwise.
  *
  * Since: 0.9.7
@@ -183,6 +183,12 @@
   if (unlikely (!ensure (len + count))) return false;
 
   memmove (info + idx + count, info + idx, (len - idx) * sizeof (info[0]));
+  if (idx + count > len)
+  {
+    /* Under memory failure we might expose this area.  At least
+     * clean it up.  Oh well... */
+    memset (info + len, 0, (idx + count - len) * sizeof (info[0]));
+  }
   len += count;
   idx += count;
 
@@ -426,6 +432,8 @@
     /* Tricky part: rewinding... */
     unsigned int count = out_len - i;
 
+    /* This will blow in our face if memory allocation fails later
+     * in this same lookup... */
     if (unlikely (idx < count && !shift_forward (count + 32))) return false;
 
     assert (idx >= count);

Modified: trunk/Build/source/libs/harfbuzz/harfbuzz-src/src/hb-common.cc
===================================================================
--- trunk/Build/source/libs/harfbuzz/harfbuzz-src/src/hb-common.cc	2016-07-21 23:20:53 UTC (rev 41747)
+++ trunk/Build/source/libs/harfbuzz/harfbuzz-src/src/hb-common.cc	2016-07-21 23:35:31 UTC (rev 41748)
@@ -88,7 +88,7 @@
 /**
  * hb_tag_to_string:
  * @tag: 
- * @buf: (array fixed-size=4): 
+ * @buf: (out caller-allocates) (array fixed-size=4) (element-type uint8_t): 
  *
  * 
  *
@@ -507,6 +507,9 @@
     /* Unicode-8.0 additions */
     case HB_SCRIPT_OLD_HUNGARIAN:
 
+    /* Unicode-9.0 additions */
+    case HB_SCRIPT_ADLAM:
+
       return HB_DIRECTION_RTL;
   }
 

Modified: trunk/Build/source/libs/harfbuzz/harfbuzz-src/src/hb-common.h
===================================================================
--- trunk/Build/source/libs/harfbuzz/harfbuzz-src/src/hb-common.h	2016-07-21 23:20:53 UTC (rev 41747)
+++ trunk/Build/source/libs/harfbuzz/harfbuzz-src/src/hb-common.h	2016-07-21 23:35:31 UTC (rev 41748)
@@ -304,13 +304,23 @@
   /*7.0*/ HB_SCRIPT_TIRHUTA			= HB_TAG ('T','i','r','h'),
   /*7.0*/ HB_SCRIPT_WARANG_CITI			= HB_TAG ('W','a','r','a'),
 
-  /*8.0*/ HB_SCRIPT_AHOM                        = HB_TAG ('A','h','o','m'),
-  /*8.0*/ HB_SCRIPT_ANATOLIAN_HIEROGLYPHS       = HB_TAG ('H','l','u','w'),
-  /*8.0*/ HB_SCRIPT_HATRAN                      = HB_TAG ('H','a','t','r'),
-  /*8.0*/ HB_SCRIPT_MULTANI                     = HB_TAG ('M','u','l','t'),
-  /*8.0*/ HB_SCRIPT_OLD_HUNGARIAN               = HB_TAG ('H','u','n','g'),
-  /*8.0*/ HB_SCRIPT_SIGNWRITING                 = HB_TAG ('S','g','n','w'),
+  /*8.0*/ HB_SCRIPT_AHOM			= HB_TAG ('A','h','o','m'),
+  /*8.0*/ HB_SCRIPT_ANATOLIAN_HIEROGLYPHS	= HB_TAG ('H','l','u','w'),
+  /*8.0*/ HB_SCRIPT_HATRAN			= HB_TAG ('H','a','t','r'),
+  /*8.0*/ HB_SCRIPT_MULTANI			= HB_TAG ('M','u','l','t'),
+  /*8.0*/ HB_SCRIPT_OLD_HUNGARIAN		= HB_TAG ('H','u','n','g'),
+  /*8.0*/ HB_SCRIPT_SIGNWRITING			= HB_TAG ('S','g','n','w'),
 
+  /*
+   * Since 1.3.0
+   */
+  /*9.0*/ HB_SCRIPT_ADLAM			= HB_TAG ('A','d','l','m'),
+  /*9.0*/ HB_SCRIPT_BHAIKSUKI			= HB_TAG ('B','h','k','s'),
+  /*9.0*/ HB_SCRIPT_MARCHEN			= HB_TAG ('M','a','r','c'),
+  /*9.0*/ HB_SCRIPT_OSAGE			= HB_TAG ('O','s','g','e'),
+  /*9.0*/ HB_SCRIPT_TANGUT			= HB_TAG ('T','a','n','g'),
+  /*9.0*/ HB_SCRIPT_NEWA			= HB_TAG ('N','e','w','a'),
+
   /* No script set. */
   HB_SCRIPT_INVALID				= HB_TAG_NONE,
 

Modified: trunk/Build/source/libs/harfbuzz/harfbuzz-src/src/hb-coretext.cc
===================================================================
--- trunk/Build/source/libs/harfbuzz/harfbuzz-src/src/hb-coretext.cc	2016-07-21 23:20:53 UTC (rev 41747)
+++ trunk/Build/source/libs/harfbuzz/harfbuzz-src/src/hb-coretext.cc	2016-07-21 23:35:31 UTC (rev 41748)
@@ -145,6 +145,7 @@
     DEBUG_MSG (CORETEXT, cg_font, "Font CTFontCreateWithGraphicsFont() failed");
     return NULL;
   }
+  CFURLRef original_url = (CFURLRef)CTFontCopyAttribute(ct_font, kCTFontURLAttribute);
 
   /* Create font copy with cascade list that has LastResort first; this speeds up CoreText
    * font fallback which we don't need anyway. */
@@ -154,14 +155,35 @@
     CFRelease (last_resort_font_desc);
     if (new_ct_font)
     {
-      CFRelease (ct_font);
-      ct_font = new_ct_font;
+      /* The CTFontCreateCopyWithAttributes call fails to stay on the same font
+       * when reconfiguring the cascade list and may switch to a different font
+       * when there are fonts that go by the same name, since the descriptor is
+       * just name and size.
+       *
+       * Avoid reconfiguring the cascade lists if the new font is outside the
+       * system locations that we cannot access from the sandboxed renderer
+       * process in Blink. This can be detected by the new file URL location
+       * that the newly found font points to. */
+      CFURLRef new_url = (CFURLRef) CTFontCopyAttribute (new_ct_font, kCTFontURLAttribute);
+      // Keep reconfigured font if URL cannot be retrieved (seems to be the case
+      // on Mac OS 10.12 Sierra), speculative fix for crbug.com/625606
+      if (!original_url || !new_url || CFEqual (original_url, new_url)) {
+        CFRelease (ct_font);
+        ct_font = new_ct_font;
+      } else {
+        CFRelease (new_ct_font);
+        DEBUG_MSG (CORETEXT, ct_font, "Discarding reconfigured CTFont, location changed.");
+      }
+      if (new_url)
+        CFRelease (new_url);
     }
     else
       DEBUG_MSG (CORETEXT, ct_font, "Font copy with empty cascade list failed");
   }
 
- return ct_font;
+  if (original_url)
+    CFRelease (original_url);
+  return ct_font;
 }
 
 struct hb_coretext_shaper_face_data_t {

Modified: trunk/Build/source/libs/harfbuzz/harfbuzz-src/src/hb-directwrite.cc
===================================================================
--- trunk/Build/source/libs/harfbuzz/harfbuzz-src/src/hb-directwrite.cc	2016-07-21 23:20:53 UTC (rev 41747)
+++ trunk/Build/source/libs/harfbuzz/harfbuzz-src/src/hb-directwrite.cc	2016-07-21 23:35:31 UTC (rev 41748)
@@ -25,11 +25,7 @@
 #define HB_SHAPER directwrite
 #include "hb-shaper-impl-private.hh"
 
-#ifndef HB_DIRECTWRITE_EXPERIMENTAL_JUSTIFICATION
-  #include <DWrite.h>
-#else
-  #include <DWrite_1.h>
-#endif
+#include <DWrite_1.h>
 
 #include "hb-directwrite.h"
 
@@ -45,168 +41,166 @@
 HB_SHAPER_DATA_ENSURE_DECLARE(directwrite, face)
 HB_SHAPER_DATA_ENSURE_DECLARE(directwrite, font)
 
+
 /*
-* shaper face data
-*/
+ * DirectWrite font stream helpers
+ */
 
-struct hb_directwrite_shaper_face_data_t {
-  HANDLE fh;
-  wchar_t face_name[LF_FACESIZE];
+// This is a font loader which provides only one font (unlike its original design).
+// For a better implementation which was also source of this
+// and DWriteFontFileStream, have a look at to NativeFontResourceDWrite.cpp in Mozilla
+class DWriteFontFileLoader : public IDWriteFontFileLoader
+{
+private:
+  IDWriteFontFileStream *mFontFileStream;
+public:
+  DWriteFontFileLoader (IDWriteFontFileStream *fontFileStream) {
+    mFontFileStream = fontFileStream;
+  }
+
+  // IUnknown interface
+  IFACEMETHOD(QueryInterface)(IID const& iid, OUT void** ppObject) { return S_OK; }
+  IFACEMETHOD_(ULONG, AddRef)() { return 1; }
+  IFACEMETHOD_(ULONG, Release)() { return 1; }
+
+  // IDWriteFontFileLoader methods
+  virtual HRESULT STDMETHODCALLTYPE CreateStreamFromKey(void const* fontFileReferenceKey,
+    UINT32 fontFileReferenceKeySize,
+    OUT IDWriteFontFileStream** fontFileStream)
+  {
+    *fontFileStream = mFontFileStream;
+    return S_OK;
+  }
 };
 
-/* face_name should point to a wchar_t[LF_FACESIZE] object. */
-static void
-_hb_generate_unique_face_name(wchar_t *face_name, unsigned int *plen)
+class DWriteFontFileStream : public IDWriteFontFileStream
 {
-  /* We'll create a private name for the font from a UUID using a simple,
-  * somewhat base64-like encoding scheme */
-  const char *enc = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+-";
-  UUID id;
-  UuidCreate ((UUID*)&id);
-  ASSERT_STATIC (2 + 3 * (16 / 2) < LF_FACESIZE);
-  unsigned int name_str_len = 0;
-  face_name[name_str_len++] = 'F';
-  face_name[name_str_len++] = '_';
-  unsigned char *p = (unsigned char *)&id;
-  for (unsigned int i = 0; i < 16; i += 2)
+private:
+  uint8_t *mData;
+  uint32_t mSize;
+public:
+  DWriteFontFileStream(uint8_t *aData, uint32_t aSize)
   {
-    /* Spread the 16 bits from two bytes of the UUID across three chars of face_name,
-    * using the bits in groups of 5,5,6 to select chars from enc.
-    * This will generate 24 characters; with the 'F_' prefix we already provided,
-    * the name will be 26 chars (plus the NUL terminator), so will always fit within
-    * face_name (LF_FACESIZE = 32). */
-    face_name[name_str_len++] = enc[p[i] >> 3];
-    face_name[name_str_len++] = enc[((p[i] << 2) | (p[i + 1] >> 6)) & 0x1f];
-    face_name[name_str_len++] = enc[p[i + 1] & 0x3f];
+    mData = aData;
+    mSize = aSize;
   }
-  face_name[name_str_len] = 0;
-  if (plen)
-    *plen = name_str_len;
-}
 
-/* Destroys blob. */
-static hb_blob_t *
-_hb_rename_font(hb_blob_t *blob, wchar_t *new_name)
-{
-  /* Create a copy of the font data, with the 'name' table replaced by a
-   * table that names the font with our private F_* name created above.
-   * For simplicity, we just append a new 'name' table and update the
-   * sfnt directory; the original table is left in place, but unused.
-   *
-   * The new table will contain just 5 name IDs: family, style, unique,
-   * full, PS. All of them point to the same name data with our unique name.
-   */
+  // IUnknown interface
+  IFACEMETHOD(QueryInterface)(IID const& iid, OUT void** ppObject) { return S_OK; }
+  IFACEMETHOD_(ULONG, AddRef)() { return 1; }
+  IFACEMETHOD_(ULONG, Release)() { return 1; }
 
-  blob = OT::Sanitizer<OT::OpenTypeFontFile>::sanitize (blob);
+  // IDWriteFontFileStream methods
+  virtual HRESULT STDMETHODCALLTYPE ReadFileFragment(void const** fragmentStart,
+    UINT64 fileOffset,
+    UINT64 fragmentSize,
+    OUT void** fragmentContext)
+  {
+    // We are required to do bounds checking.
+    if (fileOffset + fragmentSize > mSize) {
+      return E_FAIL;
+    }
 
-  unsigned int length, new_length, name_str_len;
-  const char *orig_sfnt_data = hb_blob_get_data (blob, &length);
+    // truncate the 64 bit fileOffset to size_t sized index into mData
+    size_t index = static_cast<size_t> (fileOffset);
 
-  _hb_generate_unique_face_name (new_name, &name_str_len);
-
-  static const uint16_t name_IDs[] = { 1, 2, 3, 4, 6 };
-
-  unsigned int name_table_length = OT::name::min_size +
-    ARRAY_LENGTH(name_IDs) * OT::NameRecord::static_size +
-    name_str_len * 2; /* for name data in UTF16BE form */
-  unsigned int name_table_offset = (length + 3) & ~3;
-
-  new_length = name_table_offset + ((name_table_length + 3) & ~3);
-  void *new_sfnt_data = calloc(1, new_length);
-  if (!new_sfnt_data)
-  {
-    hb_blob_destroy (blob);
-    return NULL;
+    // We should be alive for the duration of this.
+    *fragmentStart = &mData[index];
+    *fragmentContext = nullptr;
+    return S_OK;
   }
 
-  memcpy(new_sfnt_data, orig_sfnt_data, length);
+  virtual void STDMETHODCALLTYPE ReleaseFileFragment(void* fragmentContext) { }
 
-  OT::name &name = OT::StructAtOffset<OT::name> (new_sfnt_data, name_table_offset);
-  name.format.set (0);
-  name.count.set (ARRAY_LENGTH (name_IDs));
-  name.stringOffset.set (name.get_size());
-  for (unsigned int i = 0; i < ARRAY_LENGTH (name_IDs); i++)
+  virtual HRESULT STDMETHODCALLTYPE GetFileSize(OUT UINT64* fileSize)
   {
-    OT::NameRecord &record = name.nameRecord[i];
-    record.platformID.set(3);
-    record.encodingID.set(1);
-    record.languageID.set(0x0409u); /* English */
-    record.nameID.set(name_IDs[i]);
-    record.length.set(name_str_len * 2);
-    record.offset.set(0);
+    *fileSize = mSize;
+    return S_OK;
   }
 
-  /* Copy string data from new_name, converting wchar_t to UTF16BE. */
-  unsigned char *p = &OT::StructAfter<unsigned char>(name);
-  for (unsigned int i = 0; i < name_str_len; i++)
+  virtual HRESULT STDMETHODCALLTYPE GetLastWriteTime(OUT UINT64* lastWriteTime)
   {
-    *p++ = new_name[i] >> 8;
-    *p++ = new_name[i] & 0xff;
+    return E_NOTIMPL;
   }
+};
 
-  /* Adjust name table entry to point to new name table */
-  const OT::OpenTypeFontFile &file = *(OT::OpenTypeFontFile *) (new_sfnt_data);
-  unsigned int face_count = file.get_face_count ();
-  for (unsigned int face_index = 0; face_index < face_count; face_index++)
-  {
-    /* Note: doing multiple edits (ie. TTC) can be unsafe.  There may be
-    * toe-stepping.  But we don't really care. */
-    const OT::OpenTypeFontFace &face = file.get_face (face_index);
-    unsigned int index;
-    if (face.find_table_index (HB_OT_TAG_name, &index))
-    {
-      OT::TableRecord &record = const_cast<OT::TableRecord &> (face.get_table (index));
-      record.checkSum.set_for_data (&name, name_table_length);
-      record.offset.set (name_table_offset);
-      record.length.set (name_table_length);
-    }
-    else if (face_index == 0) /* Fail if first face doesn't have 'name' table. */
-    {
-      free (new_sfnt_data);
-      hb_blob_destroy (blob);
-      return NULL;
-    }
-  }
 
-  /* The checkSumAdjustment field in the 'head' table is now wrong,
-  * but that doesn't actually seem to cause any problems so we don't
-  * bother. */
+/*
+* shaper face data
+*/
 
-  hb_blob_destroy (blob);
-  return hb_blob_create ((const char *)new_sfnt_data, new_length,
-    HB_MEMORY_MODE_WRITABLE, NULL, free);
-}
+struct hb_directwrite_shaper_face_data_t {
+  IDWriteFactory *dwriteFactory;
+  IDWriteFontFile *fontFile;
+  IDWriteFontFileStream *fontFileStream;
+  IDWriteFontFileLoader *fontFileLoader;
+  IDWriteFontFace *fontFace;
+  hb_blob_t *faceBlob;
+};
 
 hb_directwrite_shaper_face_data_t *
 _hb_directwrite_shaper_face_data_create(hb_face_t *face)
 {
   hb_directwrite_shaper_face_data_t *data =
-    (hb_directwrite_shaper_face_data_t *) calloc (1, sizeof (hb_directwrite_shaper_face_data_t));
+    (hb_directwrite_shaper_face_data_t *) malloc (sizeof (hb_directwrite_shaper_face_data_t));
   if (unlikely (!data))
     return NULL;
 
+  // TODO: factory and fontFileLoader should be cached separately
+  IDWriteFactory* dwriteFactory;
+  DWriteCreateFactory (
+    DWRITE_FACTORY_TYPE_SHARED,
+    __uuidof (IDWriteFactory),
+    (IUnknown**) &dwriteFactory
+  );
+
+  HRESULT hr;
   hb_blob_t *blob = hb_face_reference_blob (face);
-  if (unlikely (!hb_blob_get_length (blob)))
-    DEBUG_MSG(DIRECTWRITE, face, "Face has empty blob");
+  IDWriteFontFileStream *fontFileStream = new DWriteFontFileStream (
+    (uint8_t*) hb_blob_get_data (blob, NULL), hb_blob_get_length (blob));
 
-  blob = _hb_rename_font (blob, data->face_name);
-  if (unlikely (!blob))
-  {
-    free(data);
-    return NULL;
+  IDWriteFontFileLoader *fontFileLoader = new DWriteFontFileLoader (fontFileStream);
+  dwriteFactory->RegisterFontFileLoader (fontFileLoader);
+
+  IDWriteFontFile *fontFile;
+  uint64_t fontFileKey = 0;
+  hr = dwriteFactory->CreateCustomFontFileReference (&fontFileKey, sizeof (fontFileKey),
+      fontFileLoader, &fontFile);
+
+#define FAIL(...) \
+  HB_STMT_START { \
+    DEBUG_MSG (DIRECTWRITE, NULL, __VA_ARGS__); \
+    return false; \
+  } HB_STMT_END;
+
+  if (FAILED (hr)) {
+    FAIL ("Failed to load font file from data!");
+    return false;
   }
 
-  DWORD num_fonts_installed;
-  data->fh = AddFontMemResourceEx ((void *)hb_blob_get_data(blob, NULL),
-    hb_blob_get_length (blob),
-    0, &num_fonts_installed);
-  if (unlikely (!data->fh))
-  {
-    DEBUG_MSG (DIRECTWRITE, face, "Face AddFontMemResourceEx() failed");
-    free (data);
-    return NULL;
+  BOOL isSupported;
+  DWRITE_FONT_FILE_TYPE fileType;
+  DWRITE_FONT_FACE_TYPE faceType;
+  UINT32 numberOfFaces;
+  hr = fontFile->Analyze (&isSupported, &fileType, &faceType, &numberOfFaces);
+  if (FAILED (hr) || !isSupported) {
+    FAIL ("Font file is not supported.");
+    return false;
   }
 
+#undef FAIL
+
+  IDWriteFontFace *fontFace;
+  dwriteFactory->CreateFontFace (faceType, 1, &fontFile, 0,
+    DWRITE_FONT_SIMULATIONS_NONE, &fontFace);
+
+  data->dwriteFactory = dwriteFactory;
+  data->fontFile = fontFile;
+  data->fontFileStream = fontFileStream;
+  data->fontFileLoader = fontFileLoader;
+  data->fontFace = fontFace;
+  data->faceBlob = blob;
+
   return data;
 }
 
@@ -213,8 +207,23 @@
 void
 _hb_directwrite_shaper_face_data_destroy(hb_directwrite_shaper_face_data_t *data)
 {
-  RemoveFontMemResourceEx(data->fh);
-  free(data);
+  if (data->fontFace)
+    data->fontFace->Release ();
+  if (data->fontFile)
+    data->fontFile->Release ();
+  if (data->dwriteFactory) {
+    if (data->fontFileLoader)
+      data->dwriteFactory->UnregisterFontFileLoader(data->fontFileLoader);
+    data->dwriteFactory->Release();
+  }
+  if (data->fontFileLoader)
+    delete data->fontFileLoader;
+  if (data->fontFileStream)
+    delete data->fontFileStream;
+  if (data->faceBlob)
+    hb_blob_destroy (data->faceBlob);
+  if (data)
+    free (data);
 }
 
 
@@ -223,27 +232,8 @@
  */
 
 struct hb_directwrite_shaper_font_data_t {
-  HDC hdc;
-  LOGFONTW log_font;
-  HFONT hfont;
 };
 
-static bool
-populate_log_font (LOGFONTW  *lf,
-       hb_font_t *font)
-{
-  memset (lf, 0, sizeof (*lf));
-  lf->lfHeight = -font->y_scale;
-  lf->lfCharSet = DEFAULT_CHARSET;
-
-  hb_face_t *face = font->face;
-  hb_directwrite_shaper_face_data_t *face_data = HB_SHAPER_DATA_GET (face);
-
-  memcpy (lf->lfFaceName, face_data->face_name, sizeof (lf->lfFaceName));
-
-  return true;
-}
-
 hb_directwrite_shaper_font_data_t *
 _hb_directwrite_shaper_font_data_create (hb_font_t *font)
 {
@@ -250,34 +240,10 @@
   if (unlikely (!hb_directwrite_shaper_face_data_ensure (font->face))) return NULL;
 
   hb_directwrite_shaper_font_data_t *data =
-    (hb_directwrite_shaper_font_data_t *) calloc (1, sizeof (hb_directwrite_shaper_font_data_t));
+    (hb_directwrite_shaper_font_data_t *) malloc (sizeof (hb_directwrite_shaper_font_data_t));
   if (unlikely (!data))
     return NULL;
 
-  data->hdc = GetDC (NULL);
-
-  if (unlikely (!populate_log_font (&data->log_font, font)))
-  {
-    DEBUG_MSG (DIRECTWRITE, font, "Font populate_log_font() failed");
-    _hb_directwrite_shaper_font_data_destroy (data);
-    return NULL;
-  }
-
-  data->hfont = CreateFontIndirectW (&data->log_font);
-  if (unlikely (!data->hfont))
-  {
-    DEBUG_MSG (DIRECTWRITE, font, "Font CreateFontIndirectW() failed");
-    _hb_directwrite_shaper_font_data_destroy (data);
-     return NULL;
-  }
-
-  if (!SelectObject (data->hdc, data->hfont))
-  {
-    DEBUG_MSG (DIRECTWRITE, font, "Font SelectObject() failed");
-    _hb_directwrite_shaper_font_data_destroy (data);
-     return NULL;
-  }
-
   return data;
 }
 
@@ -284,30 +250,10 @@
 void
 _hb_directwrite_shaper_font_data_destroy (hb_directwrite_shaper_font_data_t *data)
 {
-  if (data->hdc)
-    ReleaseDC (NULL, data->hdc);
-  if (data->hfont)
-    DeleteObject (data->hfont);
   free (data);
 }
 
-LOGFONTW *
-hb_directwrite_font_get_logfontw (hb_font_t *font)
-{
-  if (unlikely (!hb_directwrite_shaper_font_data_ensure (font))) return NULL;
-  hb_directwrite_shaper_font_data_t *font_data =  HB_SHAPER_DATA_GET (font);
-  return &font_data->log_font;
-}
 
-HFONT
-hb_directwrite_font_get_hfont (hb_font_t *font)
-{
-  if (unlikely (!hb_directwrite_shaper_font_data_ensure (font))) return NULL;
-  hb_directwrite_shaper_font_data_t *font_data =  HB_SHAPER_DATA_GET (font);
-  return font_data->hfont;
-}
-
-
 /*
  * shaper shape_plan data
  */
@@ -327,7 +273,7 @@
 {
 }
 
-// Most of here TextAnalysis is originally written by Bas Schouten for Mozilla project
+// Most of TextAnalysis is originally written by Bas Schouten for Mozilla project
 // but now is relicensed to MIT for HarfBuzz use
 class TextAnalysis
   : public IDWriteTextAnalysisSource, public IDWriteTextAnalysisSink
@@ -444,7 +390,8 @@
 
   IFACEMETHODIMP GetLocaleName(uint32_t textPosition,
     uint32_t* textLength,
-    wchar_t const** localeName) {
+    wchar_t const** localeName)
+  {
     return S_OK;
   }
 
@@ -469,7 +416,8 @@
   {
     SetCurrentRun(textPosition);
     SplitCurrentRun(textPosition);
-    while (textLength > 0) {
+    while (textLength > 0)
+    {
       Run *run = FetchNextRun(&textLength);
       run->mScript = *scriptAnalysis;
     }
@@ -502,10 +450,12 @@
     Run *origRun = mCurrentRun;
     // Split the tail if needed (the length remaining is less than the
     // current run's size).
-    if (*textLength < mCurrentRun->mTextLength) {
-      SplitCurrentRun(mCurrentRun->mTextStart + *textLength);
+    if (*textLength < mCurrentRun->mTextLength)
+    {
+      SplitCurrentRun (mCurrentRun->mTextStart + *textLength);
     }
-    else {
+    else
+    {
       // Just advance the current run.
       mCurrentRun = mCurrentRun->nextRun;
     }
@@ -522,12 +472,14 @@
     // this will usually just return early. If not, find the
     // corresponding run for the text position.
 
-    if (mCurrentRun && mCurrentRun->ContainsTextPosition(textPosition)) {
+    if (mCurrentRun && mCurrentRun->ContainsTextPosition (textPosition))
+    {
       return;
     }
 
     for (Run *run = &mRunHead; run; run = run->nextRun) {
-      if (run->ContainsTextPosition(textPosition)) {
+      if (run->ContainsTextPosition (textPosition))
+      {
         mCurrentRun = run;
         return;
       }
@@ -538,13 +490,15 @@
 
   void SplitCurrentRun(uint32_t splitPosition)
   {
-    if (!mCurrentRun) {
+    if (!mCurrentRun)
+    {
       //NS_ASSERTION(false, "SplitCurrentRun called without current run.");
       // Shouldn't be calling this when no current run is set!
       return;
     }
     // Split the current run.
-    if (splitPosition <= mCurrentRun->mTextStart) {
+    if (splitPosition <= mCurrentRun->mTextStart)
+    {
       // No need to split, already the start of a run
       // or before it. Usually the first.
       return;
@@ -600,32 +554,11 @@
   hb_face_t *face = font->face;
   hb_directwrite_shaper_face_data_t *face_data = HB_SHAPER_DATA_GET (face);
   hb_directwrite_shaper_font_data_t *font_data = HB_SHAPER_DATA_GET (font);
+  IDWriteFactory *dwriteFactory = face_data->dwriteFactory;
+  IDWriteFontFace *fontFace = face_data->fontFace;
 
-  // factory probably should be cached
-#ifndef HB_DIRECTWRITE_EXPERIMENTAL_JUSTIFICATION
-  IDWriteFactory* dwriteFactory;
-#else
-  IDWriteFactory1* dwriteFactory;
-#endif
-  DWriteCreateFactory (
-    DWRITE_FACTORY_TYPE_SHARED,
-    __uuidof (IDWriteFactory),
-    (IUnknown**) &dwriteFactory
-  );
-
-  IDWriteGdiInterop *gdiInterop;
-  dwriteFactory->GetGdiInterop (&gdiInterop);
-  IDWriteFontFace* fontFace;
-  gdiInterop->CreateFontFaceFromHdc (font_data->hdc, &fontFace);
-
-#ifndef HB_DIRECTWRITE_EXPERIMENTAL_JUSTIFICATION
   IDWriteTextAnalyzer* analyzer;
   dwriteFactory->CreateTextAnalyzer(&analyzer);
-#else
-  IDWriteTextAnalyzer* analyzer0;
-  dwriteFactory->CreateTextAnalyzer (&analyzer0);
-  IDWriteTextAnalyzer1* analyzer = (IDWriteTextAnalyzer1*) analyzer0;
-#endif
 
   unsigned int scratch_size;
   hb_buffer_t::scratch_buffer_t *scratch = buffer->get_scratch_buffer (&scratch_size);
@@ -672,7 +605,6 @@
     }
   }
 
-  HRESULT hr;
   // TODO: Handle TEST_DISABLE_OPTIONAL_LIGATURES
 
   DWRITE_READING_DIRECTION readingDirection = buffer->props.direction ? 
@@ -688,6 +620,7 @@
 
   TextAnalysis analysis(textString, textLength, NULL, readingDirection);
   TextAnalysis::Run *runHead;
+  HRESULT hr;
   hr = analysis.GenerateResults(analyzer, &runHead);
 
 #define FAIL(...) \
@@ -731,11 +664,11 @@
     (const DWRITE_TYPOGRAPHIC_FEATURES*) &singleFeatures;
   const uint32_t featureRangeLengths[] = { textLength };
 
+  uint16_t* clusterMap = (uint16_t*) malloc (textLength * sizeof (uint16_t));
+  DWRITE_SHAPING_TEXT_PROPERTIES* textProperties = (DWRITE_SHAPING_TEXT_PROPERTIES*)
+    malloc (textLength * sizeof (DWRITE_SHAPING_TEXT_PROPERTIES));
 retry_getglyphs:
-  uint16_t* clusterMap = (uint16_t*) malloc (maxGlyphCount * sizeof (uint16_t));
   uint16_t* glyphIndices = (uint16_t*) malloc (maxGlyphCount * sizeof (uint16_t));
-  DWRITE_SHAPING_TEXT_PROPERTIES* textProperties = (DWRITE_SHAPING_TEXT_PROPERTIES*)
-    malloc (maxGlyphCount * sizeof (DWRITE_SHAPING_TEXT_PROPERTIES));
   DWRITE_SHAPING_GLYPH_PROPERTIES* glyphProperties = (DWRITE_SHAPING_GLYPH_PROPERTIES*)
     malloc (maxGlyphCount * sizeof (DWRITE_SHAPING_GLYPH_PROPERTIES));
 
@@ -746,9 +679,7 @@
 
   if (unlikely (hr == HRESULT_FROM_WIN32 (ERROR_INSUFFICIENT_BUFFER)))
   {
-    free (clusterMap);
     free (glyphIndices);
-    free (textProperties);
     free (glyphProperties);
 
     maxGlyphCount *= 2;
@@ -799,107 +730,110 @@
     return false;
   }
 
-#ifdef HB_DIRECTWRITE_EXPERIMENTAL_JUSTIFICATION
+  // TODO: get lineWith from somewhere
+  float lineWidth = 0;
 
-  DWRITE_JUSTIFICATION_OPPORTUNITY* justificationOpportunities =
-    (DWRITE_JUSTIFICATION_OPPORTUNITY*)
-    malloc (maxGlyphCount * sizeof (DWRITE_JUSTIFICATION_OPPORTUNITY));
-  hr = analyzer->GetJustificationOpportunities (fontFace, fontEmSize,
-    runHead->mScript, textLength, glyphCount, textString, clusterMap,
-    glyphProperties, justificationOpportunities);
+  IDWriteTextAnalyzer1* analyzer1;
+  analyzer->QueryInterface (&analyzer1);
 
-  if (FAILED (hr))
+  if (analyzer1 && lineWidth)
   {
-    FAIL ("Analyzer failed to get justification opportunities.");
-    return false;
-  }
 
-  // TODO: get lineWith from somewhere
-  float lineWidth = 60000;
+    DWRITE_JUSTIFICATION_OPPORTUNITY* justificationOpportunities =
+      (DWRITE_JUSTIFICATION_OPPORTUNITY*)
+      malloc (maxGlyphCount * sizeof (DWRITE_JUSTIFICATION_OPPORTUNITY));
+    hr = analyzer1->GetJustificationOpportunities (fontFace, fontEmSize,
+      runHead->mScript, textLength, glyphCount, textString, clusterMap,
+      glyphProperties, justificationOpportunities);
 
-  float* justifiedGlyphAdvances =
-    (float*) malloc (maxGlyphCount * sizeof (float));
-  DWRITE_GLYPH_OFFSET* justifiedGlyphOffsets = (DWRITE_GLYPH_OFFSET*)
-    malloc (glyphCount * sizeof (DWRITE_GLYPH_OFFSET));
-  hr = analyzer->JustifyGlyphAdvances (lineWidth, glyphCount, justificationOpportunities,
-    glyphAdvances, glyphOffsets, justifiedGlyphAdvances, justifiedGlyphOffsets);
+    if (FAILED (hr))
+    {
+      FAIL ("Analyzer failed to get justification opportunities.");
+      return false;
+    }
 
-  if (FAILED (hr))
-  {
-    FAIL ("Analyzer failed to get justified glyph advances.");
-    return false;
-  }
+    float* justifiedGlyphAdvances =
+      (float*) malloc (maxGlyphCount * sizeof (float));
+    DWRITE_GLYPH_OFFSET* justifiedGlyphOffsets = (DWRITE_GLYPH_OFFSET*)
+      malloc (glyphCount * sizeof (DWRITE_GLYPH_OFFSET));
+    hr = analyzer1->JustifyGlyphAdvances (lineWidth, glyphCount, justificationOpportunities,
+      glyphAdvances, glyphOffsets, justifiedGlyphAdvances, justifiedGlyphOffsets);
 
-  DWRITE_SCRIPT_PROPERTIES scriptProperties;
-  hr = analyzer->GetScriptProperties (runHead->mScript, &scriptProperties);
-  if (FAILED (hr))
-  {
-    FAIL ("Analyzer failed to get script properties.");
-    return false;
-  }
-  uint32_t justificationCharacter = scriptProperties.justificationCharacter;
+    if (FAILED (hr))
+    {
+      FAIL("Analyzer failed to get justified glyph advances.");
+      return false;
+    }
 
-  // if a script justificationCharacter is not space, it can have GetJustifiedGlyphs
-  if (justificationCharacter != 32)
-  {
-retry_getjustifiedglyphs:
-    uint16_t* modifiedClusterMap = (uint16_t*) malloc (maxGlyphCount * sizeof (uint16_t));
-    uint16_t* modifiedGlyphIndices = (uint16_t*) malloc (maxGlyphCount * sizeof (uint16_t));
-    float* modifiedGlyphAdvances = (float*) malloc (maxGlyphCount * sizeof (float));
-    DWRITE_GLYPH_OFFSET* modifiedGlyphOffsets = (DWRITE_GLYPH_OFFSET*)
-      malloc (maxGlyphCount * sizeof (DWRITE_GLYPH_OFFSET));
-    uint32_t actualGlyphsCount;
-    hr = analyzer->GetJustifiedGlyphs (fontFace, fontEmSize, runHead->mScript,
+    DWRITE_SCRIPT_PROPERTIES scriptProperties;
+    hr = analyzer1->GetScriptProperties (runHead->mScript, &scriptProperties);
+    if (FAILED (hr))
+    {
+      FAIL("Analyzer failed to get script properties.");
+      return false;
+    }
+    uint32_t justificationCharacter = scriptProperties.justificationCharacter;
+
+    // if a script justificationCharacter is not space, it can have GetJustifiedGlyphs
+    if (justificationCharacter != 32)
+    {
+      uint16_t* modifiedClusterMap = (uint16_t*) malloc (textLength * sizeof (uint16_t));
+    retry_getjustifiedglyphs:
+      uint16_t* modifiedGlyphIndices = (uint16_t*) malloc (maxGlyphCount * sizeof (uint16_t));
+      float* modifiedGlyphAdvances = (float*) malloc (maxGlyphCount * sizeof (float));
+      DWRITE_GLYPH_OFFSET* modifiedGlyphOffsets = (DWRITE_GLYPH_OFFSET*)
+        malloc (maxGlyphCount * sizeof (DWRITE_GLYPH_OFFSET));
+      uint32_t actualGlyphsCount;
+      hr = analyzer1->GetJustifiedGlyphs (fontFace, fontEmSize, runHead->mScript,
         textLength, glyphCount, maxGlyphCount, clusterMap, glyphIndices,
         glyphAdvances, justifiedGlyphAdvances, justifiedGlyphOffsets,
         glyphProperties, &actualGlyphsCount, modifiedClusterMap, modifiedGlyphIndices,
         modifiedGlyphAdvances, modifiedGlyphOffsets);
 
-    if (hr == HRESULT_FROM_WIN32 (ERROR_INSUFFICIENT_BUFFER))
-    {
-      maxGlyphCount = actualGlyphsCount;
-      free (modifiedClusterMap);
-      free (modifiedGlyphIndices);
-      free (modifiedGlyphAdvances);
-      free (modifiedGlyphOffsets);
+      if (hr == HRESULT_FROM_WIN32 (ERROR_INSUFFICIENT_BUFFER))
+      {
+        maxGlyphCount = actualGlyphsCount;
+        free (modifiedGlyphIndices);
+        free (modifiedGlyphAdvances);
+        free (modifiedGlyphOffsets);
 
-      maxGlyphCount = actualGlyphsCount;
+        maxGlyphCount = actualGlyphsCount;
 
-      goto retry_getjustifiedglyphs;
+        goto retry_getjustifiedglyphs;
+      }
+      if (FAILED (hr))
+      {
+        FAIL ("Analyzer failed to get justified glyphs.");
+        return false;
+      }
+
+      free (clusterMap);
+      free (glyphIndices);
+      free (glyphAdvances);
+      free (glyphOffsets);
+
+      glyphCount = actualGlyphsCount;
+      clusterMap = modifiedClusterMap;
+      glyphIndices = modifiedGlyphIndices;
+      glyphAdvances = modifiedGlyphAdvances;
+      glyphOffsets = modifiedGlyphOffsets;
+
+      free (justifiedGlyphAdvances);
+      free (justifiedGlyphOffsets);
     }
-    if (FAILED (hr))
+    else
     {
-      FAIL ("Analyzer failed to get justified glyphs.");
-      return false;
+      free (glyphAdvances);
+      free (glyphOffsets);
+
+      glyphAdvances = justifiedGlyphAdvances;
+      glyphOffsets = justifiedGlyphOffsets;
     }
 
-    free (clusterMap);
-    free (glyphIndices);
-    free (glyphAdvances);
-    free (glyphOffsets);
+    free (justificationOpportunities);
 
-    glyphCount = actualGlyphsCount;
-    clusterMap = modifiedClusterMap;
-    glyphIndices = modifiedGlyphIndices;
-    glyphAdvances = modifiedGlyphAdvances;
-    glyphOffsets = modifiedGlyphOffsets;
-
-    free(justifiedGlyphAdvances);
-    free(justifiedGlyphOffsets);
   }
-  else
-  {
-    free(glyphAdvances);
-    free(glyphOffsets);
 
-    glyphAdvances = justifiedGlyphAdvances;
-    glyphOffsets = justifiedGlyphOffsets;
-  }
-
-  free(justificationOpportunities);
-
-#endif
-
   /* Ok, we've got everything we need, now compose output buffer,
    * very, *very*, carefully! */
 

Modified: trunk/Build/source/libs/harfbuzz/harfbuzz-src/src/hb-directwrite.h
===================================================================
--- trunk/Build/source/libs/harfbuzz/harfbuzz-src/src/hb-directwrite.h	2016-07-21 23:20:53 UTC (rev 41747)
+++ trunk/Build/source/libs/harfbuzz/harfbuzz-src/src/hb-directwrite.h	2016-07-21 23:35:31 UTC (rev 41748)
@@ -31,4 +31,4 @@
 
 HB_END_DECLS
 
-#endif /* HB_UNISCRIBE_H */
+#endif /* HB_DIRECTWRITE_H */

Modified: trunk/Build/source/libs/harfbuzz/harfbuzz-src/src/hb-font-private.hh
===================================================================
--- trunk/Build/source/libs/harfbuzz/harfbuzz-src/src/hb-font-private.hh	2016-07-21 23:20:53 UTC (rev 41747)
+++ trunk/Build/source/libs/harfbuzz/harfbuzz-src/src/hb-font-private.hh	2016-07-21 23:35:31 UTC (rev 41748)
@@ -505,7 +505,13 @@
   }
 
   private:
-  inline hb_position_t em_scale (int16_t v, int scale) { return (hb_position_t) (v * (int64_t) scale / face->get_upem ()); }
+  inline hb_position_t em_scale (int16_t v, int scale)
+  {
+    int upem = face->get_upem ();
+    int64_t scaled = v * (int64_t) scale;
+    scaled += scaled >= 0 ? upem/2 : -upem/2; /* Round. */
+    return (hb_position_t) (scaled / upem);
+  }
 };
 
 #define HB_SHAPER_DATA_CREATE_FUNC_EXTRA_ARGS

Modified: trunk/Build/source/libs/harfbuzz/harfbuzz-src/src/hb-font.cc
===================================================================
--- trunk/Build/source/libs/harfbuzz/harfbuzz-src/src/hb-font.cc	2016-07-21 23:20:53 UTC (rev 41747)
+++ trunk/Build/source/libs/harfbuzz/harfbuzz-src/src/hb-font.cc	2016-07-21 23:35:31 UTC (rev 41748)
@@ -158,6 +158,7 @@
 				 hb_codepoint_t glyph,
 				 void *user_data HB_UNUSED)
 {
+  /* TODO use font_extents.ascender+descender */
   return font->y_scale;
 }
 static hb_position_t

Modified: trunk/Build/source/libs/harfbuzz/harfbuzz-src/src/hb-ft.cc
===================================================================
--- trunk/Build/source/libs/harfbuzz/harfbuzz-src/src/hb-ft.cc	2016-07-21 23:20:53 UTC (rev 41747)
+++ trunk/Build/source/libs/harfbuzz/harfbuzz-src/src/hb-ft.cc	2016-07-21 23:35:31 UTC (rev 41748)
@@ -70,11 +70,12 @@
 {
   FT_Face ft_face;
   int load_flags;
+  bool symbol; /* Whether selected cmap is symbol cmap. */
   bool unref; /* Whether to destroy ft_face when done. */
 };
 
 static hb_ft_font_t *
-_hb_ft_font_create (FT_Face ft_face, bool unref)
+_hb_ft_font_create (FT_Face ft_face, bool symbol, bool unref)
 {
   hb_ft_font_t *ft_font = (hb_ft_font_t *) calloc (1, sizeof (hb_ft_font_t));
 
@@ -82,6 +83,7 @@
     return NULL;
 
   ft_font->ft_face = ft_face;
+  ft_font->symbol = symbol;
   ft_font->unref = unref;
 
   ft_font->load_flags = FT_LOAD_DEFAULT | FT_LOAD_NO_HINTING;
@@ -90,10 +92,16 @@
 }
 
 static void
+_hb_ft_face_destroy (FT_Face ft_face)
+{
+  FT_Done_Face (ft_face);
+}
+
+static void
 _hb_ft_font_destroy (hb_ft_font_t *ft_font)
 {
   if (ft_font->unref)
-    FT_Done_Face (ft_font->ft_face);
+    _hb_ft_face_destroy (ft_font->ft_face);
 
   free (ft_font);
 }
@@ -165,7 +173,21 @@
   unsigned int g = FT_Get_Char_Index (ft_font->ft_face, unicode);
 
   if (unlikely (!g))
-    return false;
+  {
+    if (unlikely (ft_font->symbol) && unicode <= 0x00FFu)
+    {
+      /* For symbol-encoded OpenType fonts, we duplicate the
+       * U+F000..F0FF range at U+0000..U+00FF.  That's what
+       * Windows seems to do, and that's hinted about at:
+       * http://www.microsoft.com/typography/otspec/recom.htm
+       * under "Non-Standard (Symbol) Fonts". */
+      g = FT_Get_Char_Index (ft_font->ft_face, 0xF000u + unicode);
+      if (!g)
+	return false;
+    }
+    else
+      return false;
+  }
 
   *glyph = g;
   return true;
@@ -444,9 +466,11 @@
 #endif
   };
 
+  bool symbol = ft_face->charmap && ft_face->charmap->encoding == FT_ENCODING_MS_SYMBOL;
+
   hb_font_set_funcs (font,
 		     funcs,
-		     _hb_ft_font_create (ft_face, unref),
+		     _hb_ft_font_create (ft_face, symbol, unref),
 		     (hb_destroy_func_t) _hb_ft_font_destroy);
 }
 
@@ -526,7 +550,7 @@
 hb_ft_face_create_referenced (FT_Face ft_face)
 {
   FT_Reference_Face (ft_face);
-  return hb_ft_face_create (ft_face, (hb_destroy_func_t) FT_Done_Face);
+  return hb_ft_face_create (ft_face, (hb_destroy_func_t) _hb_ft_face_destroy);
 }
 
 static void
@@ -606,7 +630,7 @@
 hb_ft_font_create_referenced (FT_Face ft_face)
 {
   FT_Reference_Face (ft_face);
-  return hb_ft_font_create (ft_face, (hb_destroy_func_t) FT_Done_Face);
+  return hb_ft_font_create (ft_face, (hb_destroy_func_t) _hb_ft_face_destroy);
 }
 
 
@@ -675,7 +699,8 @@
     return;
   }
 
-  FT_Select_Charmap (ft_face, FT_ENCODING_UNICODE);
+  if (FT_Select_Charmap (ft_face, FT_ENCODING_UNICODE))
+    FT_Select_Charmap (ft_face, FT_ENCODING_MS_SYMBOL);
 
   FT_Set_Char_Size (ft_face,
 		    abs (font->x_scale), abs (font->y_scale),

Modified: trunk/Build/source/libs/harfbuzz/harfbuzz-src/src/hb-gobject-structs.h
===================================================================
--- trunk/Build/source/libs/harfbuzz/harfbuzz-src/src/hb-gobject-structs.h	2016-07-21 23:20:53 UTC (rev 41747)
+++ trunk/Build/source/libs/harfbuzz/harfbuzz-src/src/hb-gobject-structs.h	2016-07-21 23:35:31 UTC (rev 41748)
@@ -41,6 +41,8 @@
 /* Object types */
 
 /**
+ * hb_gobject_blob_get_type:
+ *
  * Since: 0.9.2
  **/
 HB_EXTERN GType hb_gobject_blob_get_type (void);
@@ -47,6 +49,8 @@
 #define HB_GOBJECT_TYPE_BLOB (hb_gobject_blob_get_type ())
 
 /**
+ * hb_gobject_buffer_get_type:
+ *
  * Since: 0.9.2
  **/
 HB_EXTERN GType hb_gobject_buffer_get_type (void);
@@ -53,6 +57,8 @@
 #define HB_GOBJECT_TYPE_BUFFER (hb_gobject_buffer_get_type ())
 
 /**
+ * hb_gobject_face_get_type:
+ *
  * Since: 0.9.2
  **/
 HB_EXTERN GType hb_gobject_face_get_type (void);
@@ -59,6 +65,8 @@
 #define HB_GOBJECT_TYPE_FACE (hb_gobject_face_get_type ())
 
 /**
+ * hb_gobject_font_get_type:
+ *
  * Since: 0.9.2
  **/
 HB_EXTERN GType hb_gobject_font_get_type (void);
@@ -65,6 +73,8 @@
 #define HB_GOBJECT_TYPE_FONT (hb_gobject_font_get_type ())
 
 /**
+ * hb_gobject_font_funcs_get_type:
+ *
  * Since: 0.9.2
  **/
 HB_EXTERN GType hb_gobject_font_funcs_get_type (void);
@@ -77,6 +87,8 @@
 #define HB_GOBJECT_TYPE_SHAPE_PLAN (hb_gobject_shape_plan_get_type ())
 
 /**
+ * hb_gobject_unicode_funcs_get_type:
+ *
  * Since: 0.9.2
  **/
 HB_EXTERN GType hb_gobject_unicode_funcs_get_type (void);

Modified: trunk/Build/source/libs/harfbuzz/harfbuzz-src/src/hb-ot-font.cc
===================================================================
--- trunk/Build/source/libs/harfbuzz/harfbuzz-src/src/hb-ot-font.cc	2016-07-21 23:20:53 UTC (rev 41747)
+++ trunk/Build/source/libs/harfbuzz/harfbuzz-src/src/hb-ot-font.cc	2016-07-21 23:35:31 UTC (rev 41748)
@@ -215,6 +215,28 @@
   return typed_obj->get_glyph (codepoint, glyph);
 }
 
+template <typename Type>
+static inline bool get_glyph_from_symbol (const void *obj,
+					  hb_codepoint_t codepoint,
+					  hb_codepoint_t *glyph)
+{
+  const Type *typed_obj = (const Type *) obj;
+  if (likely (typed_obj->get_glyph (codepoint, glyph)))
+    return true;
+
+  if (codepoint <= 0x00FFu)
+  {
+    /* For symbol-encoded OpenType fonts, we duplicate the
+     * U+F000..F0FF range at U+0000..U+00FF.  That's what
+     * Windows seems to do, and that's hinted about at:
+     * http://www.microsoft.com/typography/otspec/recom.htm
+     * under "Non-Standard (Symbol) Fonts". */
+    return typed_obj->get_glyph (0xF000u + codepoint, glyph);
+  }
+
+  return false;
+}
+
 struct hb_ot_face_cmap_accelerator_t
 {
   hb_cmap_get_glyph_func_t get_glyph_func;
@@ -231,6 +253,7 @@
     const OT::CmapSubtable *subtable = NULL;
     const OT::CmapSubtableFormat14 *subtable_uvs = NULL;
 
+    bool symbol = false;
     /* 32-bit subtables. */
     if (!subtable) subtable = cmap->find_subtable (3, 10);
     if (!subtable) subtable = cmap->find_subtable (0, 6);
@@ -241,7 +264,7 @@
     if (!subtable) subtable = cmap->find_subtable (0, 2);
     if (!subtable) subtable = cmap->find_subtable (0, 1);
     if (!subtable) subtable = cmap->find_subtable (0, 0);
-    if (!subtable) subtable = cmap->find_subtable (3, 0);
+    if (!subtable)(subtable = cmap->find_subtable (3, 0)) && (symbol = true);
     /* Meh. */
     if (!subtable) subtable = &OT::Null(OT::CmapSubtable);
 
@@ -258,18 +281,21 @@
     this->uvs_table = subtable_uvs;
 
     this->get_glyph_data = subtable;
-    switch (subtable->u.format) {
-    /* Accelerate format 4 and format 12. */
-    default: this->get_glyph_func = get_glyph_from<OT::CmapSubtable>;		break;
-    case 12: this->get_glyph_func = get_glyph_from<OT::CmapSubtableFormat12>;	break;
-    case  4:
-      {
-        this->format4_accel.init (&subtable->u.format4);
-	this->get_glyph_data = &this->format4_accel;
-        this->get_glyph_func = this->format4_accel.get_glyph_func;
+    if (unlikely (symbol))
+      this->get_glyph_func = get_glyph_from_symbol<OT::CmapSubtable>;
+    else
+      switch (subtable->u.format) {
+      /* Accelerate format 4 and format 12. */
+      default: this->get_glyph_func = get_glyph_from<OT::CmapSubtable>;		break;
+      case 12: this->get_glyph_func = get_glyph_from<OT::CmapSubtableFormat12>;	break;
+      case  4:
+	{
+	  this->format4_accel.init (&subtable->u.format4);
+	  this->get_glyph_data = &this->format4_accel;
+	  this->get_glyph_func = this->format4_accel.get_glyph_func;
+	}
+	break;
       }
-      break;
-    }
   }
 
   inline void fini (void)

Modified: trunk/Build/source/libs/harfbuzz/harfbuzz-src/src/hb-ot-layout-gsub-table.hh
===================================================================
--- trunk/Build/source/libs/harfbuzz/harfbuzz-src/src/hb-ot-layout-gsub-table.hh	2016-07-21 23:20:53 UTC (rev 41747)
+++ trunk/Build/source/libs/harfbuzz/harfbuzz-src/src/hb-ot-layout-gsub-table.hh	2016-07-21 23:35:31 UTC (rev 41748)
@@ -265,16 +265,6 @@
     TRACE_APPLY (this);
     unsigned int count = substitute.len;
 
-    /* TODO:
-     * Testing shows that Uniscribe actually allows zero-len susbstitute,
-     * which essentially deletes a glyph.  We don't allow for now.  It
-     * can be confusing to the client since the cluster from the deleted
-     * glyph won't be merged with any output cluster...  Also, currently
-     * buffer->move_to() makes assumptions about this too.  Perhaps fix
-     * in the future after figuring out what to do with the clusters.
-     */
-    if (unlikely (!count)) return_trace (false);
-
     /* Special-case to make it in-place and not consider this
      * as a "multiplied" substitution. */
     if (unlikely (count == 1))
@@ -282,6 +272,13 @@
       c->replace_glyph (substitute.array[0]);
       return_trace (true);
     }
+    /* Spec disallows this, but Uniscribe allows it.
+     * https://github.com/behdad/harfbuzz/issues/253 */
+    else if (unlikely (count == 0))
+    {
+      c->buffer->delete_glyph ();
+      return_trace (true);
+    }
 
     unsigned int klass = _hb_glyph_info_is_ligature (&c->buffer->cur()) ?
 			 HB_OT_LAYOUT_GLYPH_PROPS_BASE_GLYPH : 0;

Modified: trunk/Build/source/libs/harfbuzz/harfbuzz-src/src/hb-ot-layout-gsubgpos-private.hh
===================================================================
--- trunk/Build/source/libs/harfbuzz/harfbuzz-src/src/hb-ot-layout-gsubgpos-private.hh	2016-07-21 23:20:53 UTC (rev 41747)
+++ trunk/Build/source/libs/harfbuzz/harfbuzz-src/src/hb-ot-layout-gsubgpos-private.hh	2016-07-21 23:35:31 UTC (rev 41748)
@@ -996,10 +996,13 @@
 
     /* Recursed lookup changed buffer len.  Adjust. */
 
-    /* end can't go back past the current match position.
-     * Note: this is only true because we do NOT allow MultipleSubst
-     * with zero sequence len. */
-    end = MAX (MIN((int) match_positions[idx] + 1, (int) new_len), int (end) + delta);
+    end = int (end) + delta;
+    if (end <= match_positions[idx])
+    {
+      /* There can't be any further changes. */
+      assert (end == match_positions[idx]);
+      break;
+    }
 
     unsigned int next = idx + 1; /* next now is the position after the recursed lookup. */
 

Modified: trunk/Build/source/libs/harfbuzz/harfbuzz-src/src/hb-ot-layout.cc
===================================================================
--- trunk/Build/source/libs/harfbuzz/harfbuzz-src/src/hb-ot-layout.cc	2016-07-21 23:20:53 UTC (rev 41747)
+++ trunk/Build/source/libs/harfbuzz/harfbuzz-src/src/hb-ot-layout.cc	2016-07-21 23:35:31 UTC (rev 41748)
@@ -93,6 +93,45 @@
      if (3 == layout->gdef->get_glyph_class (5))
        layout->gdef = &OT::Null(OT::GDEF);
     }
+    else if (0
+      /* sha1sum:96eda93f7d33e79962451c6c39a6b51ee893ce8c  tahoma.ttf from Windows 8 */
+      || (898 == gdef_len && 46470 == gpos_len && 12554 == gsub_len)
+      /* sha1sum:20928dc06014e0cd120b6fc942d0c3b1a46ac2bc  tahomabd.ttf from Windows 8 */
+      || (910 == gdef_len && 47732 == gpos_len && 12566 == gsub_len)
+      /* sha1sum:4f95b7e4878f60fa3a39ca269618dfde9721a79e  tahoma.ttf from Windows 8.1 */
+      || (928 == gdef_len && 59332 == gpos_len && 23298 == gsub_len)
+      /* sha1sum:6d400781948517c3c0441ba42acb309584b73033  tahomabd.ttf from Windows 8.1 */
+      || (940 == gdef_len && 60732 == gpos_len && 23310 == gsub_len)
+      /* sha1sum:e55fa2dfe957a9f7ec26be516a0e30b0c925f846  tahoma.ttf from Windows 10 */
+      || (994 == gdef_len && 60336 == gpos_len && 24474 == gsub_len)
+      /* sha1sum:7199385abb4c2cc81c83a151a7599b6368e92343  tahomabd.ttf from Windows 10 */
+      || (1006 == gdef_len && 61740 == gpos_len && 24470 == gsub_len)
+      /* sha1sum:b0d36cf5a2fbe746a3dd277bffc6756a820807a7  Tahoma.ttf from Mac OS X 10.9 */
+      || (832 == gdef_len && 47162 == gpos_len && 7324 == gsub_len)
+      /* sha1sum:12fc4538e84d461771b30c18b5eb6bd434e30fba  Tahoma Bold.ttf from Mac OS X 10.9 */
+      || (844 == gdef_len && 45474 == gpos_len && 7302 == gsub_len)
+      /* sha1sum:73da7f025b238a3f737aa1fde22577a6370f77b0  himalaya.ttf from Windows 8 */
+      || (192 == gdef_len && 7254 == gpos_len && 12638 == gsub_len)
+      /* sha1sum:6e80fd1c0b059bbee49272401583160dc1e6a427  himalaya.ttf from Windows 8.1 */
+      || (192 == gdef_len && 7254 == gpos_len && 12690 == gsub_len)
+      /* 8d9267aea9cd2c852ecfb9f12a6e834bfaeafe44  cantarell-fonts-0.0.21/otf/Cantarell-Regular.otf */
+      /* 983988ff7b47439ab79aeaf9a45bd4a2c5b9d371  cantarell-fonts-0.0.21/otf/Cantarell-Oblique.otf */
+      || (188 == gdef_len && 3852 == gpos_len && 248 == gsub_len)
+      /* 2c0c90c6f6087ffbfea76589c93113a9cbb0e75f  cantarell-fonts-0.0.21/otf/Cantarell-Bold.otf */
+      /* 55461f5b853c6da88069ffcdf7f4dd3f8d7e3e6b  cantarell-fonts-0.0.21/otf/Cantarell-Bold-Oblique.otf */
+      || (188 == gdef_len && 3426 == gpos_len && 264 == gsub_len)
+    )
+    {
+      /* Many versions of Tahoma have bad GDEF tables that incorrectly classify some spacing marks
+       * such as certain IPA symbols as glyph class 3. So do older versions of Microsoft Himalaya,
+       * and the version of Cantarell shipped by Ubuntu 16.04.
+       * Nuke the GDEF tables of these fonts to avoid unwanted width-zeroing.
+       * See https://bugzilla.mozilla.org/show_bug.cgi?id=1279925
+       *     https://bugzilla.mozilla.org/show_bug.cgi?id=1279693
+       *     https://bugzilla.mozilla.org/show_bug.cgi?id=1279875
+       */
+      layout->gdef = &OT::Null(OT::GDEF);
+    }
   }
 
   layout->gsub_lookup_count = layout->gsub->get_lookup_count ();

Modified: trunk/Build/source/libs/harfbuzz/harfbuzz-src/src/hb-ot-shape-complex-arabic-table.hh
===================================================================
--- trunk/Build/source/libs/harfbuzz/harfbuzz-src/src/hb-ot-shape-complex-arabic-table.hh	2016-07-21 23:20:53 UTC (rev 41747)
+++ trunk/Build/source/libs/harfbuzz/harfbuzz-src/src/hb-ot-shape-complex-arabic-table.hh	2016-07-21 23:35:31 UTC (rev 41748)
@@ -6,10 +6,10 @@
  *
  * on files with these headers:
  *
- * # ArabicShaping-8.0.0.txt
- * # Date: 2015-02-17, 23:33:00 GMT [RP]
- * # Blocks-8.0.0.txt
- * # Date: 2014-11-10, 23:04:00 GMT [KW]
+ * # ArabicShaping-9.0.0.txt
+ * # Date: 2016-02-24, 22:25:00 GMT [RP]
+ * # Blocks-9.0.0.txt
+ * # Date: 2016-02-05, 23:48:00 GMT [KW]
  * UnicodeData.txt does not have a header.
  */
 
@@ -19,6 +19,7 @@
 
 #define X	JOINING_TYPE_X
 #define R	JOINING_TYPE_R
+#define T	JOINING_TYPE_T
 #define U	JOINING_TYPE_U
 #define A	JOINING_GROUP_ALAPH
 #define DR	JOINING_GROUP_DALATH_RISH
@@ -76,9 +77,11 @@
 
   /* Arabic Extended-A */
 
-  /* 08A0 */ D,D,D,D,D,D,D,D,D,D,R,R,R,U,R,D,D,R,R,D,D,
+  /* 08A0 */ D,D,D,D,D,D,D,D,D,D,R,R,R,U,R,D,D,R,R,D,D,X,D,D,D,R,D,D,D,D,X,X,
+  /* 08C0 */ X,X,X,X,X,X,X,X,X,X,X,X,X,X,X,X,X,X,X,X,X,X,X,X,X,X,X,X,X,X,X,X,
+  /* 08E0 */ X,X,U,
 
-#define joining_offset_0x1806u 693
+#define joining_offset_0x1806u 739
 
   /* Mongolian */
 
@@ -86,29 +89,26 @@
   /* 1820 */ D,D,D,D,D,D,D,D,D,D,D,D,D,D,D,D,D,D,D,D,D,D,D,D,D,D,D,D,D,D,D,D,
   /* 1840 */ D,D,D,D,D,D,D,D,D,D,D,D,D,D,D,D,D,D,D,D,D,D,D,D,D,D,D,D,D,D,D,D,
   /* 1860 */ D,D,D,D,D,D,D,D,D,D,D,D,D,D,D,D,D,D,D,D,D,D,D,D,X,X,X,X,X,X,X,X,
-  /* 1880 */ U,U,U,U,U,U,U,D,D,D,D,D,D,D,D,D,D,D,D,D,D,D,D,D,D,D,D,D,D,D,D,D,
+  /* 1880 */ U,U,U,U,U,T,T,D,D,D,D,D,D,D,D,D,D,D,D,D,D,D,D,D,D,D,D,D,D,D,D,D,
   /* 18A0 */ D,D,D,D,D,D,D,D,D,X,D,
 
-#define joining_offset_0x200cu 858
+#define joining_offset_0x200cu 904
 
   /* General Punctuation */
 
-  /* 2000 */                         U,C,
+  /* 2000 */                         U,C,X,X,X,X,X,X,X,X,X,X,X,X,X,X,X,X,X,X,
+  /* 2020 */ X,X,X,X,X,X,X,X,X,X,X,X,X,X,X,U,X,X,X,X,X,X,X,X,X,X,X,X,X,X,X,X,
+  /* 2040 */ X,X,X,X,X,X,X,X,X,X,X,X,X,X,X,X,X,X,X,X,X,X,X,X,X,X,X,X,X,X,X,X,
+  /* 2060 */ X,X,X,X,X,X,U,U,U,U,
 
-#define joining_offset_0x2066u 860
+#define joining_offset_0xa840u 998
 
-  /* General Punctuation */
-
-  /* 2060 */             U,U,U,U,
-
-#define joining_offset_0xa840u 864
-
   /* Phags-pa */
 
   /* A840 */ D,D,D,D,D,D,D,D,D,D,D,D,D,D,D,D,D,D,D,D,D,D,D,D,D,D,D,D,D,D,D,D,
   /* A860 */ D,D,D,D,D,D,D,D,D,D,D,D,D,D,D,D,D,D,L,U,
 
-#define joining_offset_0x10ac0u 916
+#define joining_offset_0x10ac0u 1050
 
   /* Manichaean */
 
@@ -115,7 +115,7 @@
   /* 10AC0 */ D,D,D,D,D,R,U,R,U,R,R,U,U,L,R,R,R,R,R,D,D,D,D,L,D,D,D,D,D,R,D,D,
   /* 10AE0 */ D,R,U,U,R,X,X,X,X,X,X,D,D,D,D,R,
 
-#define joining_offset_0x10b80u 964
+#define joining_offset_0x10b80u 1098
 
   /* Psalter Pahlavi */
 
@@ -122,9 +122,17 @@
   /* 10B80 */ D,R,D,R,R,R,D,D,D,R,D,D,R,D,R,R,D,R,X,X,X,X,X,X,X,X,X,X,X,X,X,X,
   /* 10BA0 */ X,X,X,X,X,X,X,X,X,R,R,R,R,D,D,U,
 
-}; /* Table items: 1012; occupancy: 57% */
+#define joining_offset_0x1e900u 1146
 
+  /* Adlam */
 
+  /* 1E900 */ D,D,D,D,D,D,D,D,D,D,D,D,D,D,D,D,D,D,D,D,D,D,D,D,D,D,D,D,D,D,D,D,
+  /* 1E920 */ D,D,D,D,D,D,D,D,D,D,D,D,D,D,D,D,D,D,D,D,D,D,D,D,D,D,D,D,D,D,D,D,
+  /* 1E940 */ D,D,D,D,
+
+}; /* Table items: 1214; occupancy: 54% */
+
+
 static unsigned int
 joining_type (hb_codepoint_t u)
 {
@@ -131,7 +139,7 @@
   switch (u >> 12)
   {
     case 0x0u:
-      if (hb_in_range (u, 0x0600u, 0x08B4u)) return joining_table[u - 0x0600u + joining_offset_0x0600u];
+      if (hb_in_range (u, 0x0600u, 0x08E2u)) return joining_table[u - 0x0600u + joining_offset_0x0600u];
       break;
 
     case 0x1u:
@@ -139,8 +147,7 @@
       break;
 
     case 0x2u:
-      if (hb_in_range (u, 0x200Cu, 0x200Du)) return joining_table[u - 0x200Cu + joining_offset_0x200cu];
-      if (hb_in_range (u, 0x2066u, 0x2069u)) return joining_table[u - 0x2066u + joining_offset_0x2066u];
+      if (hb_in_range (u, 0x200Cu, 0x2069u)) return joining_table[u - 0x200Cu + joining_offset_0x200cu];
       break;
 
     case 0xAu:
@@ -152,6 +159,10 @@
       if (hb_in_range (u, 0x10B80u, 0x10BAFu)) return joining_table[u - 0x10B80u + joining_offset_0x10b80u];
       break;
 
+    case 0x1Eu:
+      if (hb_in_range (u, 0x1E900u, 0x1E943u)) return joining_table[u - 0x1E900u + joining_offset_0x1e900u];
+      break;
+
     default:
       break;
   }
@@ -160,6 +171,7 @@
 
 #undef X
 #undef R
+#undef T
 #undef U
 #undef A
 #undef DR

Modified: trunk/Build/source/libs/harfbuzz/harfbuzz-src/src/hb-ot-shape-complex-indic-machine.hh
===================================================================
--- trunk/Build/source/libs/harfbuzz/harfbuzz-src/src/hb-ot-shape-complex-indic-machine.hh	2016-07-21 23:20:53 UTC (rev 41747)
+++ trunk/Build/source/libs/harfbuzz/harfbuzz-src/src/hb-ot-shape-complex-indic-machine.hh	2016-07-21 23:35:31 UTC (rev 41748)
@@ -56,52 +56,52 @@
 	5u, 7u, 5u, 8u, 5u, 7u, 7u, 7u, 5u, 8u, 5u, 7u, 7u, 7u, 5u, 8u, 
 	5u, 7u, 7u, 7u, 8u, 8u, 1u, 16u, 8u, 13u, 4u, 8u, 6u, 6u, 16u, 16u, 
 	4u, 8u, 6u, 6u, 16u, 16u, 4u, 8u, 6u, 6u, 16u, 16u, 4u, 8u, 6u, 6u, 
-	16u, 16u, 8u, 8u, 1u, 31u, 3u, 31u, 3u, 31u, 4u, 31u, 1u, 16u, 3u, 31u, 
-	3u, 31u, 4u, 31u, 1u, 16u, 3u, 31u, 3u, 31u, 4u, 31u, 1u, 16u, 3u, 31u, 
-	3u, 31u, 4u, 31u, 1u, 16u, 3u, 31u, 3u, 31u, 4u, 31u, 5u, 14u, 5u, 14u, 
+	16u, 16u, 8u, 8u, 1u, 18u, 3u, 17u, 3u, 17u, 4u, 17u, 1u, 16u, 3u, 17u, 
+	3u, 17u, 4u, 17u, 1u, 16u, 3u, 17u, 3u, 17u, 4u, 17u, 1u, 16u, 3u, 17u, 
+	3u, 17u, 4u, 17u, 1u, 16u, 3u, 17u, 3u, 17u, 4u, 17u, 5u, 14u, 5u, 14u, 
 	5u, 10u, 9u, 10u, 9u, 9u, 9u, 10u, 9u, 10u, 9u, 9u, 5u, 10u, 3u, 13u, 
 	3u, 10u, 5u, 10u, 3u, 10u, 3u, 13u, 3u, 14u, 3u, 14u, 4u, 14u, 5u, 14u, 
 	3u, 14u, 4u, 14u, 5u, 14u, 3u, 14u, 4u, 14u, 5u, 14u, 3u, 14u, 4u, 14u, 
-	5u, 14u, 3u, 14u, 1u, 16u, 4u, 31u, 4u, 14u, 3u, 31u, 3u, 31u, 1u, 16u, 
-	1u, 16u, 1u, 16u, 1u, 16u, 1u, 16u, 3u, 31u, 3u, 31u, 1u, 16u, 1u, 16u, 
-	1u, 16u, 1u, 16u, 1u, 16u, 3u, 31u, 3u, 31u, 1u, 16u, 1u, 16u, 1u, 16u, 
-	1u, 16u, 1u, 16u, 3u, 31u, 3u, 31u, 1u, 16u, 1u, 16u, 1u, 16u, 1u, 16u, 
-	1u, 16u, 3u, 31u, 3u, 31u, 3u, 31u, 3u, 31u, 4u, 31u, 1u, 16u, 3u, 31u, 
-	3u, 31u, 4u, 31u, 1u, 16u, 3u, 31u, 3u, 31u, 4u, 31u, 1u, 16u, 3u, 31u, 
-	3u, 31u, 4u, 31u, 1u, 16u, 3u, 31u, 3u, 31u, 4u, 31u, 5u, 14u, 5u, 14u, 
-	5u, 10u, 9u, 10u, 9u, 9u, 9u, 10u, 9u, 10u, 9u, 9u, 5u, 10u, 3u, 13u, 
-	3u, 10u, 5u, 10u, 3u, 10u, 3u, 13u, 3u, 14u, 3u, 14u, 4u, 14u, 5u, 14u, 
-	3u, 14u, 4u, 14u, 5u, 14u, 3u, 14u, 4u, 14u, 5u, 14u, 3u, 14u, 4u, 14u, 
-	5u, 14u, 3u, 14u, 1u, 16u, 4u, 31u, 4u, 14u, 3u, 31u, 3u, 31u, 1u, 16u, 
-	1u, 16u, 1u, 16u, 1u, 16u, 1u, 16u, 3u, 31u, 3u, 31u, 1u, 16u, 1u, 16u, 
-	1u, 16u, 1u, 16u, 1u, 16u, 3u, 31u, 3u, 31u, 1u, 16u, 1u, 16u, 1u, 16u, 
-	1u, 16u, 1u, 16u, 3u, 31u, 3u, 31u, 1u, 16u, 1u, 16u, 1u, 16u, 1u, 16u, 
-	4u, 14u, 1u, 16u, 3u, 31u, 3u, 31u, 4u, 31u, 1u, 16u, 3u, 31u, 3u, 31u, 
-	4u, 31u, 1u, 16u, 3u, 31u, 3u, 31u, 4u, 31u, 1u, 16u, 3u, 31u, 3u, 31u, 
-	4u, 31u, 1u, 16u, 3u, 31u, 3u, 31u, 4u, 31u, 5u, 14u, 5u, 14u, 5u, 10u, 
+	5u, 14u, 3u, 14u, 1u, 16u, 4u, 14u, 3u, 17u, 3u, 17u, 1u, 16u, 1u, 16u, 
+	1u, 16u, 1u, 16u, 1u, 16u, 3u, 17u, 3u, 17u, 1u, 16u, 1u, 16u, 1u, 16u, 
+	1u, 16u, 1u, 16u, 3u, 17u, 3u, 17u, 1u, 16u, 1u, 16u, 1u, 16u, 1u, 16u, 
+	1u, 16u, 3u, 17u, 3u, 17u, 1u, 16u, 1u, 16u, 1u, 16u, 1u, 16u, 1u, 16u, 
+	3u, 17u, 3u, 17u, 3u, 17u, 3u, 17u, 4u, 17u, 1u, 16u, 3u, 17u, 3u, 17u, 
+	4u, 17u, 1u, 16u, 3u, 17u, 3u, 17u, 4u, 17u, 1u, 16u, 3u, 17u, 3u, 17u, 
+	4u, 17u, 1u, 16u, 3u, 17u, 3u, 17u, 4u, 17u, 5u, 14u, 5u, 14u, 5u, 10u, 
 	9u, 10u, 9u, 9u, 9u, 10u, 9u, 10u, 9u, 9u, 5u, 10u, 3u, 13u, 3u, 10u, 
 	5u, 10u, 3u, 10u, 3u, 13u, 3u, 14u, 3u, 14u, 4u, 14u, 5u, 14u, 3u, 14u, 
 	4u, 14u, 5u, 14u, 3u, 14u, 4u, 14u, 5u, 14u, 3u, 14u, 4u, 14u, 5u, 14u, 
-	3u, 14u, 1u, 16u, 4u, 31u, 4u, 14u, 3u, 31u, 3u, 31u, 1u, 16u, 1u, 16u, 
-	1u, 16u, 1u, 16u, 1u, 16u, 3u, 31u, 3u, 31u, 1u, 16u, 1u, 16u, 1u, 16u, 
-	1u, 16u, 1u, 16u, 3u, 31u, 3u, 31u, 1u, 16u, 1u, 16u, 1u, 16u, 1u, 16u, 
-	1u, 16u, 3u, 31u, 3u, 31u, 1u, 16u, 1u, 16u, 1u, 16u, 1u, 16u, 1u, 16u, 
-	4u, 14u, 3u, 31u, 4u, 14u, 3u, 31u, 3u, 31u, 4u, 31u, 1u, 16u, 3u, 31u, 
-	3u, 31u, 4u, 31u, 1u, 16u, 3u, 31u, 3u, 31u, 4u, 31u, 1u, 16u, 3u, 31u, 
-	3u, 31u, 4u, 31u, 1u, 16u, 3u, 31u, 3u, 31u, 4u, 31u, 5u, 14u, 5u, 14u, 
-	5u, 10u, 9u, 10u, 9u, 9u, 9u, 10u, 9u, 10u, 9u, 9u, 5u, 10u, 3u, 13u, 
-	3u, 10u, 5u, 10u, 3u, 10u, 3u, 13u, 3u, 14u, 3u, 14u, 4u, 14u, 5u, 14u, 
+	3u, 14u, 1u, 16u, 4u, 14u, 3u, 17u, 3u, 17u, 1u, 16u, 1u, 16u, 1u, 16u, 
+	1u, 16u, 1u, 16u, 3u, 17u, 3u, 17u, 1u, 16u, 1u, 16u, 1u, 16u, 1u, 16u, 
+	1u, 16u, 3u, 17u, 3u, 17u, 1u, 16u, 1u, 16u, 1u, 16u, 1u, 16u, 1u, 16u, 
+	3u, 17u, 3u, 17u, 1u, 16u, 1u, 16u, 1u, 16u, 1u, 16u, 4u, 14u, 1u, 16u, 
+	3u, 17u, 3u, 17u, 4u, 17u, 1u, 16u, 3u, 17u, 3u, 17u, 4u, 17u, 1u, 16u, 
+	3u, 17u, 3u, 17u, 4u, 17u, 1u, 16u, 3u, 17u, 3u, 17u, 4u, 17u, 1u, 16u, 
+	3u, 17u, 3u, 17u, 4u, 17u, 5u, 14u, 5u, 14u, 5u, 10u, 9u, 10u, 9u, 9u, 
+	9u, 10u, 9u, 10u, 9u, 9u, 5u, 10u, 3u, 13u, 3u, 10u, 5u, 10u, 3u, 10u, 
+	3u, 13u, 3u, 14u, 3u, 14u, 4u, 14u, 5u, 14u, 3u, 14u, 4u, 14u, 5u, 14u, 
+	3u, 14u, 4u, 14u, 5u, 14u, 3u, 14u, 4u, 14u, 5u, 14u, 3u, 14u, 1u, 16u, 
+	4u, 14u, 3u, 17u, 3u, 17u, 1u, 16u, 1u, 16u, 1u, 16u, 1u, 16u, 1u, 16u, 
+	3u, 17u, 3u, 17u, 1u, 16u, 1u, 16u, 1u, 16u, 1u, 16u, 1u, 16u, 3u, 17u, 
+	3u, 17u, 1u, 16u, 1u, 16u, 1u, 16u, 1u, 16u, 1u, 16u, 3u, 17u, 3u, 17u, 
+	1u, 16u, 1u, 16u, 1u, 16u, 1u, 16u, 1u, 16u, 4u, 14u, 3u, 17u, 4u, 14u, 
+	3u, 17u, 3u, 17u, 4u, 17u, 1u, 16u, 3u, 17u, 3u, 17u, 4u, 17u, 1u, 16u, 
+	3u, 17u, 3u, 17u, 4u, 17u, 1u, 16u, 3u, 17u, 3u, 17u, 4u, 17u, 1u, 16u, 
+	3u, 17u, 3u, 17u, 4u, 17u, 5u, 14u, 5u, 14u, 5u, 10u, 9u, 10u, 9u, 9u, 
+	9u, 10u, 9u, 10u, 9u, 9u, 5u, 10u, 3u, 13u, 3u, 10u, 5u, 10u, 3u, 10u, 
+	3u, 13u, 3u, 14u, 3u, 14u, 4u, 14u, 5u, 14u, 3u, 14u, 4u, 14u, 5u, 14u, 
+	3u, 14u, 4u, 14u, 5u, 14u, 3u, 14u, 4u, 14u, 5u, 14u, 3u, 14u, 1u, 16u, 
+	4u, 14u, 3u, 17u, 3u, 17u, 1u, 16u, 1u, 16u, 1u, 16u, 1u, 16u, 1u, 16u, 
+	3u, 17u, 3u, 17u, 1u, 16u, 1u, 16u, 1u, 16u, 1u, 16u, 1u, 16u, 3u, 17u, 
+	3u, 17u, 1u, 16u, 1u, 16u, 1u, 16u, 1u, 16u, 1u, 16u, 3u, 17u, 3u, 17u, 
+	1u, 16u, 1u, 16u, 1u, 16u, 1u, 16u, 1u, 16u, 3u, 17u, 1u, 17u, 3u, 17u, 
+	1u, 17u, 4u, 14u, 5u, 10u, 9u, 10u, 9u, 9u, 9u, 10u, 9u, 10u, 9u, 9u, 
+	5u, 10u, 1u, 16u, 3u, 17u, 3u, 17u, 4u, 17u, 3u, 17u, 3u, 17u, 1u, 16u, 
 	3u, 14u, 4u, 14u, 5u, 14u, 3u, 14u, 4u, 14u, 5u, 14u, 3u, 14u, 4u, 14u, 
-	5u, 14u, 3u, 14u, 1u, 16u, 4u, 31u, 4u, 14u, 3u, 31u, 3u, 31u, 1u, 16u, 
-	1u, 16u, 1u, 16u, 1u, 16u, 1u, 16u, 3u, 31u, 3u, 31u, 1u, 16u, 1u, 16u, 
-	1u, 16u, 1u, 16u, 1u, 16u, 3u, 31u, 3u, 31u, 1u, 16u, 1u, 16u, 1u, 16u, 
-	1u, 16u, 1u, 16u, 3u, 31u, 3u, 31u, 1u, 16u, 1u, 16u, 1u, 16u, 1u, 16u, 
-	1u, 16u, 3u, 31u, 1u, 31u, 3u, 31u, 1u, 31u, 4u, 14u, 5u, 10u, 9u, 10u, 
-	9u, 9u, 9u, 10u, 9u, 10u, 9u, 9u, 5u, 10u, 1u, 16u, 3u, 31u, 3u, 31u, 
-	4u, 31u, 3u, 31u, 3u, 31u, 1u, 16u, 3u, 14u, 4u, 14u, 5u, 14u, 3u, 14u, 
-	4u, 14u, 5u, 14u, 3u, 14u, 4u, 14u, 5u, 14u, 3u, 14u, 4u, 14u, 5u, 14u, 
-	3u, 13u, 3u, 10u, 5u, 10u, 3u, 10u, 3u, 13u, 1u, 16u, 3u, 10u, 5u, 10u, 
-	5u, 10u, 9u, 10u, 9u, 9u, 9u, 10u, 9u, 10u, 9u, 9u, 5u, 10u, 0
+	5u, 14u, 3u, 14u, 4u, 14u, 5u, 14u, 3u, 13u, 3u, 10u, 5u, 10u, 3u, 10u, 
+	3u, 13u, 1u, 16u, 3u, 10u, 5u, 10u, 5u, 10u, 9u, 10u, 9u, 9u, 9u, 10u, 
+	9u, 10u, 9u, 9u, 5u, 10u, 0
 };
 
 static const char _indic_syllable_machine_key_spans[] = {
@@ -127,52 +127,52 @@
 	3, 4, 3, 1, 4, 3, 1, 4, 
 	3, 1, 1, 16, 6, 5, 1, 1, 
 	5, 1, 1, 5, 1, 1, 5, 1, 
-	1, 1, 31, 29, 29, 28, 16, 29, 
-	29, 28, 16, 29, 29, 28, 16, 29, 
-	29, 28, 16, 29, 29, 28, 10, 10, 
+	1, 1, 18, 15, 15, 14, 16, 15, 
+	15, 14, 16, 15, 15, 14, 16, 15, 
+	15, 14, 16, 15, 15, 14, 10, 10, 
 	6, 2, 1, 2, 2, 1, 6, 11, 
 	8, 6, 8, 11, 12, 12, 11, 10, 
 	12, 11, 10, 12, 11, 10, 12, 11, 
-	10, 12, 16, 28, 11, 29, 29, 16, 
-	16, 16, 16, 16, 29, 29, 16, 16, 
-	16, 16, 16, 29, 29, 16, 16, 16, 
-	16, 16, 29, 29, 16, 16, 16, 16, 
-	16, 29, 29, 29, 29, 28, 16, 29, 
-	29, 28, 16, 29, 29, 28, 16, 29, 
-	29, 28, 16, 29, 29, 28, 10, 10, 
-	6, 2, 1, 2, 2, 1, 6, 11, 
-	8, 6, 8, 11, 12, 12, 11, 10, 
-	12, 11, 10, 12, 11, 10, 12, 11, 
-	10, 12, 16, 28, 11, 29, 29, 16, 
-	16, 16, 16, 16, 29, 29, 16, 16, 
-	16, 16, 16, 29, 29, 16, 16, 16, 
-	16, 16, 29, 29, 16, 16, 16, 16, 
-	11, 16, 29, 29, 28, 16, 29, 29, 
-	28, 16, 29, 29, 28, 16, 29, 29, 
-	28, 16, 29, 29, 28, 10, 10, 6, 
+	10, 12, 16, 11, 15, 15, 16, 16, 
+	16, 16, 16, 15, 15, 16, 16, 16, 
+	16, 16, 15, 15, 16, 16, 16, 16, 
+	16, 15, 15, 16, 16, 16, 16, 16, 
+	15, 15, 15, 15, 14, 16, 15, 15, 
+	14, 16, 15, 15, 14, 16, 15, 15, 
+	14, 16, 15, 15, 14, 10, 10, 6, 
 	2, 1, 2, 2, 1, 6, 11, 8, 
 	6, 8, 11, 12, 12, 11, 10, 12, 
 	11, 10, 12, 11, 10, 12, 11, 10, 
-	12, 16, 28, 11, 29, 29, 16, 16, 
-	16, 16, 16, 29, 29, 16, 16, 16, 
-	16, 16, 29, 29, 16, 16, 16, 16, 
-	16, 29, 29, 16, 16, 16, 16, 16, 
-	11, 29, 11, 29, 29, 28, 16, 29, 
-	29, 28, 16, 29, 29, 28, 16, 29, 
-	29, 28, 16, 29, 29, 28, 10, 10, 
-	6, 2, 1, 2, 2, 1, 6, 11, 
-	8, 6, 8, 11, 12, 12, 11, 10, 
+	12, 16, 11, 15, 15, 16, 16, 16, 
+	16, 16, 15, 15, 16, 16, 16, 16, 
+	16, 15, 15, 16, 16, 16, 16, 16, 
+	15, 15, 16, 16, 16, 16, 11, 16, 
+	15, 15, 14, 16, 15, 15, 14, 16, 
+	15, 15, 14, 16, 15, 15, 14, 16, 
+	15, 15, 14, 10, 10, 6, 2, 1, 
+	2, 2, 1, 6, 11, 8, 6, 8, 
+	11, 12, 12, 11, 10, 12, 11, 10, 
+	12, 11, 10, 12, 11, 10, 12, 16, 
+	11, 15, 15, 16, 16, 16, 16, 16, 
+	15, 15, 16, 16, 16, 16, 16, 15, 
+	15, 16, 16, 16, 16, 16, 15, 15, 
+	16, 16, 16, 16, 16, 11, 15, 11, 
+	15, 15, 14, 16, 15, 15, 14, 16, 
+	15, 15, 14, 16, 15, 15, 14, 16, 
+	15, 15, 14, 10, 10, 6, 2, 1, 
+	2, 2, 1, 6, 11, 8, 6, 8, 
+	11, 12, 12, 11, 10, 12, 11, 10, 
+	12, 11, 10, 12, 11, 10, 12, 16, 
+	11, 15, 15, 16, 16, 16, 16, 16, 
+	15, 15, 16, 16, 16, 16, 16, 15, 
+	15, 16, 16, 16, 16, 16, 15, 15, 
+	16, 16, 16, 16, 16, 15, 17, 15, 
+	17, 11, 6, 2, 1, 2, 2, 1, 
+	6, 16, 15, 15, 14, 15, 15, 16, 
 	12, 11, 10, 12, 11, 10, 12, 11, 
-	10, 12, 16, 28, 11, 29, 29, 16, 
-	16, 16, 16, 16, 29, 29, 16, 16, 
-	16, 16, 16, 29, 29, 16, 16, 16, 
-	16, 16, 29, 29, 16, 16, 16, 16, 
-	16, 29, 31, 29, 31, 11, 6, 2, 
-	1, 2, 2, 1, 6, 16, 29, 29, 
-	28, 29, 29, 16, 12, 11, 10, 12, 
-	11, 10, 12, 11, 10, 12, 11, 10, 
-	11, 8, 6, 8, 11, 16, 8, 6, 
-	6, 2, 1, 2, 2, 1, 6
+	10, 12, 11, 10, 11, 8, 6, 8, 
+	11, 16, 8, 6, 6, 2, 1, 2, 
+	2, 1, 6
 };
 
 static const short _indic_syllable_machine_index_offsets[] = {
@@ -198,52 +198,52 @@
 	954, 958, 963, 967, 969, 974, 978, 980, 
 	985, 989, 991, 993, 1010, 1017, 1023, 1025, 
 	1027, 1033, 1035, 1037, 1043, 1045, 1047, 1053, 
-	1055, 1057, 1059, 1091, 1121, 1151, 1180, 1197, 
-	1227, 1257, 1286, 1303, 1333, 1363, 1392, 1409, 
-	1439, 1469, 1498, 1515, 1545, 1575, 1604, 1615, 
-	1626, 1633, 1636, 1638, 1641, 1644, 1646, 1653, 
-	1665, 1674, 1681, 1690, 1702, 1715, 1728, 1740, 
-	1751, 1764, 1776, 1787, 1800, 1812, 1823, 1836, 
-	1848, 1859, 1872, 1889, 1918, 1930, 1960, 1990, 
-	2007, 2024, 2041, 2058, 2075, 2105, 2135, 2152, 
-	2169, 2186, 2203, 2220, 2250, 2280, 2297, 2314, 
-	2331, 2348, 2365, 2395, 2425, 2442, 2459, 2476, 
-	2493, 2510, 2540, 2570, 2600, 2630, 2659, 2676, 
-	2706, 2736, 2765, 2782, 2812, 2842, 2871, 2888, 
-	2918, 2948, 2977, 2994, 3024, 3054, 3083, 3094, 
-	3105, 3112, 3115, 3117, 3120, 3123, 3125, 3132, 
-	3144, 3153, 3160, 3169, 3181, 3194, 3207, 3219, 
-	3230, 3243, 3255, 3266, 3279, 3291, 3302, 3315, 
-	3327, 3338, 3351, 3368, 3397, 3409, 3439, 3469, 
-	3486, 3503, 3520, 3537, 3554, 3584, 3614, 3631, 
-	3648, 3665, 3682, 3699, 3729, 3759, 3776, 3793, 
-	3810, 3827, 3844, 3874, 3904, 3921, 3938, 3955, 
-	3972, 3984, 4001, 4031, 4061, 4090, 4107, 4137, 
-	4167, 4196, 4213, 4243, 4273, 4302, 4319, 4349, 
-	4379, 4408, 4425, 4455, 4485, 4514, 4525, 4536, 
-	4543, 4546, 4548, 4551, 4554, 4556, 4563, 4575, 
-	4584, 4591, 4600, 4612, 4625, 4638, 4650, 4661, 
-	4674, 4686, 4697, 4710, 4722, 4733, 4746, 4758, 
-	4769, 4782, 4799, 4828, 4840, 4870, 4900, 4917, 
-	4934, 4951, 4968, 4985, 5015, 5045, 5062, 5079, 
-	5096, 5113, 5130, 5160, 5190, 5207, 5224, 5241, 
-	5258, 5275, 5305, 5335, 5352, 5369, 5386, 5403, 
-	5420, 5432, 5462, 5474, 5504, 5534, 5563, 5580, 
-	5610, 5640, 5669, 5686, 5716, 5746, 5775, 5792, 
-	5822, 5852, 5881, 5898, 5928, 5958, 5987, 5998, 
-	6009, 6016, 6019, 6021, 6024, 6027, 6029, 6036, 
-	6048, 6057, 6064, 6073, 6085, 6098, 6111, 6123, 
-	6134, 6147, 6159, 6170, 6183, 6195, 6206, 6219, 
-	6231, 6242, 6255, 6272, 6301, 6313, 6343, 6373, 
-	6390, 6407, 6424, 6441, 6458, 6488, 6518, 6535, 
-	6552, 6569, 6586, 6603, 6633, 6663, 6680, 6697, 
-	6714, 6731, 6748, 6778, 6808, 6825, 6842, 6859, 
-	6876, 6893, 6923, 6955, 6985, 7017, 7029, 7036, 
-	7039, 7041, 7044, 7047, 7049, 7056, 7073, 7103, 
-	7133, 7162, 7192, 7222, 7239, 7252, 7264, 7275, 
-	7288, 7300, 7311, 7324, 7336, 7347, 7360, 7372, 
-	7383, 7395, 7404, 7411, 7420, 7432, 7449, 7458, 
-	7465, 7472, 7475, 7477, 7480, 7483, 7485
+	1055, 1057, 1059, 1078, 1094, 1110, 1125, 1142, 
+	1158, 1174, 1189, 1206, 1222, 1238, 1253, 1270, 
+	1286, 1302, 1317, 1334, 1350, 1366, 1381, 1392, 
+	1403, 1410, 1413, 1415, 1418, 1421, 1423, 1430, 
+	1442, 1451, 1458, 1467, 1479, 1492, 1505, 1517, 
+	1528, 1541, 1553, 1564, 1577, 1589, 1600, 1613, 
+	1625, 1636, 1649, 1666, 1678, 1694, 1710, 1727, 
+	1744, 1761, 1778, 1795, 1811, 1827, 1844, 1861, 
+	1878, 1895, 1912, 1928, 1944, 1961, 1978, 1995, 
+	2012, 2029, 2045, 2061, 2078, 2095, 2112, 2129, 
+	2146, 2162, 2178, 2194, 2210, 2225, 2242, 2258, 
+	2274, 2289, 2306, 2322, 2338, 2353, 2370, 2386, 
+	2402, 2417, 2434, 2450, 2466, 2481, 2492, 2503, 
+	2510, 2513, 2515, 2518, 2521, 2523, 2530, 2542, 
+	2551, 2558, 2567, 2579, 2592, 2605, 2617, 2628, 
+	2641, 2653, 2664, 2677, 2689, 2700, 2713, 2725, 
+	2736, 2749, 2766, 2778, 2794, 2810, 2827, 2844, 
+	2861, 2878, 2895, 2911, 2927, 2944, 2961, 2978, 
+	2995, 3012, 3028, 3044, 3061, 3078, 3095, 3112, 
+	3129, 3145, 3161, 3178, 3195, 3212, 3229, 3241, 
+	3258, 3274, 3290, 3305, 3322, 3338, 3354, 3369, 
+	3386, 3402, 3418, 3433, 3450, 3466, 3482, 3497, 
+	3514, 3530, 3546, 3561, 3572, 3583, 3590, 3593, 
+	3595, 3598, 3601, 3603, 3610, 3622, 3631, 3638, 
+	3647, 3659, 3672, 3685, 3697, 3708, 3721, 3733, 
+	3744, 3757, 3769, 3780, 3793, 3805, 3816, 3829, 
+	3846, 3858, 3874, 3890, 3907, 3924, 3941, 3958, 
+	3975, 3991, 4007, 4024, 4041, 4058, 4075, 4092, 
+	4108, 4124, 4141, 4158, 4175, 4192, 4209, 4225, 
+	4241, 4258, 4275, 4292, 4309, 4326, 4338, 4354, 
+	4366, 4382, 4398, 4413, 4430, 4446, 4462, 4477, 
+	4494, 4510, 4526, 4541, 4558, 4574, 4590, 4605, 
+	4622, 4638, 4654, 4669, 4680, 4691, 4698, 4701, 
+	4703, 4706, 4709, 4711, 4718, 4730, 4739, 4746, 
+	4755, 4767, 4780, 4793, 4805, 4816, 4829, 4841, 
+	4852, 4865, 4877, 4888, 4901, 4913, 4924, 4937, 
+	4954, 4966, 4982, 4998, 5015, 5032, 5049, 5066, 
+	5083, 5099, 5115, 5132, 5149, 5166, 5183, 5200, 
+	5216, 5232, 5249, 5266, 5283, 5300, 5317, 5333, 
+	5349, 5366, 5383, 5400, 5417, 5434, 5450, 5468, 
+	5484, 5502, 5514, 5521, 5524, 5526, 5529, 5532, 
+	5534, 5541, 5558, 5574, 5590, 5605, 5621, 5637, 
+	5654, 5667, 5679, 5690, 5703, 5715, 5726, 5739, 
+	5751, 5762, 5775, 5787, 5798, 5810, 5819, 5826, 
+	5835, 5847, 5864, 5873, 5880, 5887, 5890, 5892, 
+	5895, 5898, 5900
 };
 
 static const short _indic_syllable_machine_indicies[] = {
@@ -381,809 +381,611 @@
 	161, 161, 162, 157, 0, 183, 0, 184, 
 	0, 186, 185, 188, 189, 190, 191, 192, 
 	193, 84, 79, 194, 195, 196, 196, 156, 
-	197, 198, 199, 200, 201, 187, 187, 187, 
-	187, 187, 187, 187, 187, 187, 187, 187, 
-	187, 202, 187, 204, 205, 206, 207, 6, 
-	1, 208, 209, 203, 203, 38, 210, 203, 
-	203, 211, 203, 203, 203, 203, 203, 203, 
-	203, 203, 203, 203, 203, 203, 203, 212, 
-	203, 213, 205, 214, 214, 6, 1, 208, 
-	209, 203, 203, 203, 210, 203, 203, 211, 
-	203, 203, 203, 203, 203, 203, 203, 203, 
-	203, 203, 203, 203, 203, 212, 203, 205, 
-	214, 214, 6, 1, 208, 209, 203, 203, 
-	203, 210, 203, 203, 211, 203, 203, 203, 
-	203, 203, 203, 203, 203, 203, 203, 203, 
-	203, 203, 212, 203, 215, 203, 203, 203, 
-	19, 216, 203, 1, 208, 209, 203, 203, 
-	203, 217, 203, 215, 203, 218, 219, 220, 
-	221, 6, 1, 208, 209, 203, 203, 36, 
-	222, 203, 203, 211, 203, 203, 203, 203, 
-	203, 203, 203, 203, 203, 203, 203, 203, 
-	203, 212, 203, 223, 219, 224, 224, 6, 
-	1, 208, 209, 203, 203, 203, 222, 203, 
-	203, 211, 203, 203, 203, 203, 203, 203, 
-	203, 203, 203, 203, 203, 203, 203, 212, 
-	203, 219, 224, 224, 6, 1, 208, 209, 
-	203, 203, 203, 222, 203, 203, 211, 203, 
-	203, 203, 203, 203, 203, 203, 203, 203, 
-	203, 203, 203, 203, 212, 203, 225, 203, 
-	203, 203, 19, 226, 203, 1, 208, 209, 
-	203, 203, 203, 217, 203, 225, 203, 227, 
-	228, 229, 230, 6, 1, 208, 209, 203, 
-	203, 34, 231, 203, 203, 211, 203, 203, 
-	203, 203, 203, 203, 203, 203, 203, 203, 
-	203, 203, 203, 212, 203, 232, 228, 233, 
-	233, 6, 1, 208, 209, 203, 203, 203, 
-	231, 203, 203, 211, 203, 203, 203, 203, 
-	203, 203, 203, 203, 203, 203, 203, 203, 
-	203, 212, 203, 228, 233, 233, 6, 1, 
-	208, 209, 203, 203, 203, 231, 203, 203, 
-	211, 203, 203, 203, 203, 203, 203, 203, 
-	203, 203, 203, 203, 203, 203, 212, 203, 
-	234, 203, 203, 203, 19, 235, 203, 1, 
-	208, 209, 203, 203, 203, 217, 203, 234, 
-	203, 236, 237, 238, 239, 6, 1, 208, 
-	209, 203, 203, 32, 240, 203, 203, 211, 
-	203, 203, 203, 203, 203, 203, 203, 203, 
-	203, 203, 203, 203, 203, 212, 203, 241, 
-	237, 242, 242, 6, 1, 208, 209, 203, 
-	203, 203, 240, 203, 203, 211, 203, 203, 
-	203, 203, 203, 203, 203, 203, 203, 203, 
-	203, 203, 203, 212, 203, 237, 242, 242, 
-	6, 1, 208, 209, 203, 203, 203, 240, 
-	203, 203, 211, 203, 203, 203, 203, 203, 
-	203, 203, 203, 203, 203, 203, 203, 203, 
-	212, 203, 243, 203, 203, 203, 19, 244, 
-	203, 1, 208, 209, 203, 203, 203, 217, 
-	203, 243, 203, 245, 246, 247, 248, 6, 
-	1, 208, 209, 203, 203, 30, 249, 203, 
-	203, 211, 203, 203, 203, 203, 203, 203, 
-	203, 203, 203, 203, 203, 203, 203, 212, 
-	203, 250, 246, 251, 251, 6, 1, 208, 
-	209, 203, 203, 203, 249, 203, 203, 211, 
-	203, 203, 203, 203, 203, 203, 203, 203, 
-	203, 203, 203, 203, 203, 212, 203, 246, 
-	251, 251, 6, 1, 208, 209, 203, 203, 
-	203, 249, 203, 203, 211, 203, 203, 203, 
-	203, 203, 203, 203, 203, 203, 203, 203, 
-	203, 203, 212, 203, 19, 252, 203, 1, 
-	208, 209, 203, 203, 203, 217, 203, 253, 
-	253, 203, 1, 208, 209, 203, 203, 203, 
-	217, 203, 254, 203, 203, 255, 208, 209, 
-	203, 208, 209, 203, 256, 203, 208, 257, 
-	203, 208, 258, 203, 208, 203, 254, 203, 
-	203, 203, 208, 209, 203, 259, 203, 260, 
-	261, 203, 1, 208, 209, 203, 203, 4, 
-	203, 3, 203, 253, 253, 203, 1, 208, 
-	209, 203, 253, 253, 203, 1, 208, 209, 
-	203, 259, 203, 253, 253, 203, 1, 208, 
-	209, 203, 259, 203, 260, 253, 203, 1, 
-	208, 209, 203, 203, 4, 203, 19, 203, 
-	262, 262, 6, 1, 208, 209, 203, 203, 
-	203, 217, 203, 263, 28, 264, 265, 9, 
-	1, 208, 209, 203, 203, 203, 217, 203, 
-	28, 264, 265, 9, 1, 208, 209, 203, 
-	203, 203, 217, 203, 264, 264, 9, 1, 
-	208, 209, 203, 203, 203, 217, 203, 266, 
-	25, 267, 268, 12, 1, 208, 209, 203, 
-	203, 203, 217, 203, 25, 267, 268, 12, 
-	1, 208, 209, 203, 203, 203, 217, 203, 
-	267, 267, 12, 1, 208, 209, 203, 203, 
-	203, 217, 203, 269, 22, 270, 271, 15, 
-	1, 208, 209, 203, 203, 203, 217, 203, 
-	22, 270, 271, 15, 1, 208, 209, 203, 
-	203, 203, 217, 203, 270, 270, 15, 1, 
-	208, 209, 203, 203, 203, 217, 203, 272, 
-	19, 253, 273, 203, 1, 208, 209, 203, 
-	203, 203, 217, 203, 19, 253, 273, 203, 
-	1, 208, 209, 203, 203, 203, 217, 203, 
-	253, 274, 203, 1, 208, 209, 203, 203, 
-	203, 217, 203, 19, 203, 253, 253, 203, 
-	1, 208, 209, 203, 203, 203, 217, 203, 
-	2, 3, 203, 203, 19, 252, 203, 1, 
-	208, 209, 203, 203, 203, 217, 203, 2, 
-	203, 246, 251, 251, 6, 1, 208, 209, 
-	203, 203, 203, 249, 203, 203, 203, 203, 
-	203, 203, 203, 203, 203, 203, 203, 203, 
-	203, 203, 203, 203, 212, 203, 246, 251, 
-	251, 6, 1, 208, 209, 203, 203, 203, 
-	249, 203, 245, 246, 251, 251, 6, 1, 
-	208, 209, 203, 203, 203, 249, 203, 203, 
-	211, 203, 203, 203, 203, 203, 203, 203, 
-	203, 203, 203, 203, 203, 203, 212, 203, 
-	245, 246, 247, 251, 6, 1, 208, 209, 
-	203, 203, 30, 249, 203, 203, 211, 203, 
-	203, 203, 203, 203, 203, 203, 203, 203, 
-	203, 203, 203, 203, 212, 203, 243, 203, 
-	275, 203, 262, 262, 6, 1, 208, 209, 
-	203, 203, 203, 217, 203, 243, 203, 243, 
-	203, 203, 203, 253, 253, 203, 1, 208, 
-	209, 203, 203, 203, 217, 203, 243, 203, 
-	243, 203, 203, 203, 253, 276, 203, 1, 
-	208, 209, 203, 203, 203, 217, 203, 243, 
-	203, 243, 203, 275, 203, 253, 253, 203, 
-	1, 208, 209, 203, 203, 203, 217, 203, 
-	243, 203, 243, 3, 203, 203, 19, 244, 
-	203, 1, 208, 209, 203, 203, 203, 217, 
-	203, 243, 203, 236, 237, 242, 242, 6, 
-	1, 208, 209, 203, 203, 203, 240, 203, 
-	203, 211, 203, 203, 203, 203, 203, 203, 
-	203, 203, 203, 203, 203, 203, 203, 212, 
-	203, 236, 237, 238, 242, 6, 1, 208, 
-	209, 203, 203, 32, 240, 203, 203, 211, 
-	203, 203, 203, 203, 203, 203, 203, 203, 
-	203, 203, 203, 203, 203, 212, 203, 234, 
-	203, 277, 203, 262, 262, 6, 1, 208, 
-	209, 203, 203, 203, 217, 203, 234, 203, 
-	234, 203, 203, 203, 253, 253, 203, 1, 
-	208, 209, 203, 203, 203, 217, 203, 234, 
-	203, 234, 203, 203, 203, 253, 278, 203, 
-	1, 208, 209, 203, 203, 203, 217, 203, 
-	234, 203, 234, 203, 277, 203, 253, 253, 
-	203, 1, 208, 209, 203, 203, 203, 217, 
-	203, 234, 203, 234, 3, 203, 203, 19, 
-	235, 203, 1, 208, 209, 203, 203, 203, 
-	217, 203, 234, 203, 227, 228, 233, 233, 
-	6, 1, 208, 209, 203, 203, 203, 231, 
-	203, 203, 211, 203, 203, 203, 203, 203, 
-	203, 203, 203, 203, 203, 203, 203, 203, 
-	212, 203, 227, 228, 229, 233, 6, 1, 
-	208, 209, 203, 203, 34, 231, 203, 203, 
-	211, 203, 203, 203, 203, 203, 203, 203, 
-	203, 203, 203, 203, 203, 203, 212, 203, 
-	225, 203, 279, 203, 262, 262, 6, 1, 
-	208, 209, 203, 203, 203, 217, 203, 225, 
-	203, 225, 203, 203, 203, 253, 253, 203, 
-	1, 208, 209, 203, 203, 203, 217, 203, 
-	225, 203, 225, 203, 203, 203, 253, 280, 
-	203, 1, 208, 209, 203, 203, 203, 217, 
-	203, 225, 203, 225, 203, 279, 203, 253, 
-	253, 203, 1, 208, 209, 203, 203, 203, 
-	217, 203, 225, 203, 225, 3, 203, 203, 
-	19, 226, 203, 1, 208, 209, 203, 203, 
-	203, 217, 203, 225, 203, 218, 219, 224, 
-	224, 6, 1, 208, 209, 203, 203, 203, 
-	222, 203, 203, 211, 203, 203, 203, 203, 
-	203, 203, 203, 203, 203, 203, 203, 203, 
-	203, 212, 203, 218, 219, 220, 224, 6, 
-	1, 208, 209, 203, 203, 36, 222, 203, 
-	203, 211, 203, 203, 203, 203, 203, 203, 
-	203, 203, 203, 203, 203, 203, 203, 212, 
-	203, 215, 203, 281, 203, 262, 262, 6, 
-	1, 208, 209, 203, 203, 203, 217, 203, 
-	215, 203, 215, 203, 203, 203, 253, 253, 
-	203, 1, 208, 209, 203, 203, 203, 217, 
-	203, 215, 203, 215, 203, 203, 203, 253, 
-	282, 203, 1, 208, 209, 203, 203, 203, 
-	217, 203, 215, 203, 215, 203, 281, 203, 
-	253, 253, 203, 1, 208, 209, 203, 203, 
-	203, 217, 203, 215, 203, 215, 3, 203, 
-	203, 19, 216, 203, 1, 208, 209, 203, 
-	203, 203, 217, 203, 215, 203, 204, 205, 
-	214, 214, 6, 1, 208, 209, 203, 203, 
-	203, 210, 203, 203, 211, 203, 203, 203, 
-	203, 203, 203, 203, 203, 203, 203, 203, 
-	203, 203, 212, 203, 204, 205, 206, 214, 
-	6, 1, 208, 209, 203, 203, 38, 210, 
-	203, 203, 211, 203, 203, 203, 203, 203, 
-	203, 203, 203, 203, 203, 203, 203, 203, 
-	212, 203, 284, 285, 286, 287, 45, 40, 
-	288, 289, 283, 283, 77, 290, 283, 283, 
-	291, 283, 283, 283, 283, 283, 283, 283, 
-	283, 283, 283, 283, 283, 283, 292, 283, 
-	293, 285, 294, 287, 45, 40, 288, 289, 
-	283, 283, 283, 290, 283, 283, 291, 283, 
-	283, 283, 283, 283, 283, 283, 283, 283, 
-	283, 283, 283, 283, 292, 283, 285, 294, 
-	287, 45, 40, 288, 289, 283, 283, 283, 
-	290, 283, 283, 291, 283, 283, 283, 283, 
-	283, 283, 283, 283, 283, 283, 283, 283, 
-	283, 292, 283, 295, 283, 283, 283, 58, 
-	296, 283, 40, 288, 289, 283, 283, 283, 
-	297, 283, 295, 283, 298, 299, 300, 301, 
-	45, 40, 288, 289, 283, 283, 75, 302, 
-	283, 283, 291, 283, 283, 283, 283, 283, 
-	283, 283, 283, 283, 283, 283, 283, 283, 
-	292, 283, 303, 299, 304, 304, 45, 40, 
-	288, 289, 283, 283, 283, 302, 283, 283, 
-	291, 283, 283, 283, 283, 283, 283, 283, 
-	283, 283, 283, 283, 283, 283, 292, 283, 
-	299, 304, 304, 45, 40, 288, 289, 283, 
-	283, 283, 302, 283, 283, 291, 283, 283, 
-	283, 283, 283, 283, 283, 283, 283, 283, 
-	283, 283, 283, 292, 283, 305, 283, 283, 
-	283, 58, 306, 283, 40, 288, 289, 283, 
-	283, 283, 297, 283, 305, 283, 307, 308, 
-	309, 310, 45, 40, 288, 289, 283, 283, 
-	73, 311, 283, 283, 291, 283, 283, 283, 
-	283, 283, 283, 283, 283, 283, 283, 283, 
-	283, 283, 292, 283, 312, 308, 313, 313, 
-	45, 40, 288, 289, 283, 283, 283, 311, 
-	283, 283, 291, 283, 283, 283, 283, 283, 
-	283, 283, 283, 283, 283, 283, 283, 283, 
-	292, 283, 308, 313, 313, 45, 40, 288, 
-	289, 283, 283, 283, 311, 283, 283, 291, 
-	283, 283, 283, 283, 283, 283, 283, 283, 
-	283, 283, 283, 283, 283, 292, 283, 314, 
-	283, 283, 283, 58, 315, 283, 40, 288, 
-	289, 283, 283, 283, 297, 283, 314, 283, 
-	316, 317, 318, 319, 45, 40, 288, 289, 
-	283, 283, 71, 320, 283, 283, 291, 283, 
-	283, 283, 283, 283, 283, 283, 283, 283, 
-	283, 283, 283, 283, 292, 283, 321, 317, 
-	322, 322, 45, 40, 288, 289, 283, 283, 
-	283, 320, 283, 283, 291, 283, 283, 283, 
-	283, 283, 283, 283, 283, 283, 283, 283, 
-	283, 283, 292, 283, 317, 322, 322, 45, 
-	40, 288, 289, 283, 283, 283, 320, 283, 
-	283, 291, 283, 283, 283, 283, 283, 283, 
-	283, 283, 283, 283, 283, 283, 283, 292, 
-	283, 323, 283, 283, 283, 58, 324, 283, 
-	40, 288, 289, 283, 283, 283, 297, 283, 
-	323, 283, 325, 326, 327, 328, 45, 40, 
-	288, 289, 283, 283, 69, 329, 283, 283, 
-	291, 283, 283, 283, 283, 283, 283, 283, 
-	283, 283, 283, 283, 283, 283, 292, 283, 
-	330, 326, 331, 331, 45, 40, 288, 289, 
-	283, 283, 283, 329, 283, 283, 291, 283, 
-	283, 283, 283, 283, 283, 283, 283, 283, 
-	283, 283, 283, 283, 292, 283, 326, 331, 
-	331, 45, 40, 288, 289, 283, 283, 283, 
-	329, 283, 283, 291, 283, 283, 283, 283, 
-	283, 283, 283, 283, 283, 283, 283, 283, 
-	283, 292, 283, 58, 332, 283, 40, 288, 
-	289, 283, 283, 283, 297, 283, 333, 333, 
-	283, 40, 288, 289, 283, 283, 283, 297, 
-	283, 334, 283, 283, 335, 288, 289, 283, 
-	288, 289, 283, 336, 283, 288, 337, 283, 
-	288, 338, 283, 288, 283, 334, 283, 283, 
-	283, 288, 289, 283, 339, 283, 340, 341, 
-	283, 40, 288, 289, 283, 283, 43, 283, 
-	42, 283, 333, 333, 283, 40, 288, 289, 
-	283, 333, 333, 283, 40, 288, 289, 283, 
-	339, 283, 333, 333, 283, 40, 288, 289, 
-	283, 339, 283, 340, 333, 283, 40, 288, 
-	289, 283, 283, 43, 283, 58, 283, 342, 
-	342, 45, 40, 288, 289, 283, 283, 283, 
-	297, 283, 343, 67, 344, 345, 48, 40, 
-	288, 289, 283, 283, 283, 297, 283, 67, 
-	344, 345, 48, 40, 288, 289, 283, 283, 
-	283, 297, 283, 344, 344, 48, 40, 288, 
-	289, 283, 283, 283, 297, 283, 346, 64, 
-	347, 348, 51, 40, 288, 289, 283, 283, 
-	283, 297, 283, 64, 347, 348, 51, 40, 
-	288, 289, 283, 283, 283, 297, 283, 347, 
-	347, 51, 40, 288, 289, 283, 283, 283, 
-	297, 283, 349, 61, 350, 351, 54, 40, 
-	288, 289, 283, 283, 283, 297, 283, 61, 
-	350, 351, 54, 40, 288, 289, 283, 283, 
-	283, 297, 283, 350, 350, 54, 40, 288, 
-	289, 283, 283, 283, 297, 283, 352, 58, 
-	333, 353, 283, 40, 288, 289, 283, 283, 
-	283, 297, 283, 58, 333, 353, 283, 40, 
-	288, 289, 283, 283, 283, 297, 283, 333, 
-	354, 283, 40, 288, 289, 283, 283, 283, 
-	297, 283, 58, 283, 333, 333, 283, 40, 
-	288, 289, 283, 283, 283, 297, 283, 41, 
-	42, 283, 283, 58, 332, 283, 40, 288, 
-	289, 283, 283, 283, 297, 283, 41, 283, 
-	326, 331, 331, 45, 40, 288, 289, 283, 
-	283, 283, 329, 283, 283, 283, 283, 283, 
-	283, 283, 283, 283, 283, 283, 283, 283, 
-	283, 283, 283, 292, 283, 326, 331, 331, 
-	45, 40, 288, 289, 283, 283, 283, 329, 
-	283, 325, 326, 331, 331, 45, 40, 288, 
-	289, 283, 283, 283, 329, 283, 283, 291, 
-	283, 283, 283, 283, 283, 283, 283, 283, 
-	283, 283, 283, 283, 283, 292, 283, 325, 
-	326, 327, 331, 45, 40, 288, 289, 283, 
-	283, 69, 329, 283, 283, 291, 283, 283, 
-	283, 283, 283, 283, 283, 283, 283, 283, 
-	283, 283, 283, 292, 283, 323, 283, 355, 
-	283, 342, 342, 45, 40, 288, 289, 283, 
-	283, 283, 297, 283, 323, 283, 323, 283, 
-	283, 283, 333, 333, 283, 40, 288, 289, 
-	283, 283, 283, 297, 283, 323, 283, 323, 
-	283, 283, 283, 333, 356, 283, 40, 288, 
-	289, 283, 283, 283, 297, 283, 323, 283, 
-	323, 283, 355, 283, 333, 333, 283, 40, 
-	288, 289, 283, 283, 283, 297, 283, 323, 
-	283, 323, 42, 283, 283, 58, 324, 283, 
-	40, 288, 289, 283, 283, 283, 297, 283, 
-	323, 283, 316, 317, 322, 322, 45, 40, 
-	288, 289, 283, 283, 283, 320, 283, 283, 
-	291, 283, 283, 283, 283, 283, 283, 283, 
-	283, 283, 283, 283, 283, 283, 292, 283, 
-	316, 317, 318, 322, 45, 40, 288, 289, 
-	283, 283, 71, 320, 283, 283, 291, 283, 
-	283, 283, 283, 283, 283, 283, 283, 283, 
-	283, 283, 283, 283, 292, 283, 314, 283, 
-	357, 283, 342, 342, 45, 40, 288, 289, 
-	283, 283, 283, 297, 283, 314, 283, 314, 
-	283, 283, 283, 333, 333, 283, 40, 288, 
-	289, 283, 283, 283, 297, 283, 314, 283, 
-	314, 283, 283, 283, 333, 358, 283, 40, 
-	288, 289, 283, 283, 283, 297, 283, 314, 
-	283, 314, 283, 357, 283, 333, 333, 283, 
-	40, 288, 289, 283, 283, 283, 297, 283, 
-	314, 283, 314, 42, 283, 283, 58, 315, 
-	283, 40, 288, 289, 283, 283, 283, 297, 
-	283, 314, 283, 307, 308, 313, 313, 45, 
-	40, 288, 289, 283, 283, 283, 311, 283, 
-	283, 291, 283, 283, 283, 283, 283, 283, 
-	283, 283, 283, 283, 283, 283, 283, 292, 
-	283, 307, 308, 309, 313, 45, 40, 288, 
-	289, 283, 283, 73, 311, 283, 283, 291, 
-	283, 283, 283, 283, 283, 283, 283, 283, 
-	283, 283, 283, 283, 283, 292, 283, 305, 
-	283, 359, 283, 342, 342, 45, 40, 288, 
-	289, 283, 283, 283, 297, 283, 305, 283, 
-	305, 283, 283, 283, 333, 333, 283, 40, 
-	288, 289, 283, 283, 283, 297, 283, 305, 
-	283, 305, 283, 283, 283, 333, 360, 283, 
-	40, 288, 289, 283, 283, 283, 297, 283, 
-	305, 283, 305, 283, 359, 283, 333, 333, 
-	283, 40, 288, 289, 283, 283, 283, 297, 
-	283, 305, 283, 305, 42, 283, 283, 58, 
-	306, 283, 40, 288, 289, 283, 283, 283, 
-	297, 283, 305, 283, 298, 299, 304, 304, 
-	45, 40, 288, 289, 283, 283, 283, 302, 
-	283, 283, 291, 283, 283, 283, 283, 283, 
-	283, 283, 283, 283, 283, 283, 283, 283, 
-	292, 283, 298, 299, 300, 304, 45, 40, 
-	288, 289, 283, 283, 75, 302, 283, 283, 
-	291, 283, 283, 283, 283, 283, 283, 283, 
-	283, 283, 283, 283, 283, 283, 292, 283, 
-	295, 283, 361, 283, 342, 342, 45, 40, 
-	288, 289, 283, 283, 283, 297, 283, 295, 
-	283, 295, 283, 283, 283, 333, 333, 283, 
-	40, 288, 289, 283, 283, 283, 297, 283, 
-	295, 283, 295, 283, 283, 283, 333, 362, 
-	283, 40, 288, 289, 283, 283, 283, 297, 
-	283, 295, 283, 295, 283, 361, 283, 333, 
-	333, 283, 40, 288, 289, 283, 283, 283, 
-	297, 283, 295, 283, 76, 44, 44, 45, 
-	40, 283, 283, 283, 283, 283, 76, 283, 
-	295, 42, 283, 283, 58, 296, 283, 40, 
-	288, 289, 283, 283, 283, 297, 283, 295, 
-	283, 284, 285, 294, 287, 45, 40, 288, 
-	289, 283, 283, 283, 290, 283, 283, 291, 
-	283, 283, 283, 283, 283, 283, 283, 283, 
-	283, 283, 283, 283, 283, 292, 283, 364, 
-	191, 365, 365, 84, 79, 194, 195, 363, 
-	363, 363, 197, 363, 363, 200, 363, 363, 
-	363, 363, 363, 363, 363, 363, 363, 363, 
-	363, 363, 363, 202, 363, 191, 365, 365, 
-	84, 79, 194, 195, 363, 363, 363, 197, 
-	363, 363, 200, 363, 363, 363, 363, 363, 
-	363, 363, 363, 363, 363, 363, 363, 363, 
-	202, 363, 366, 363, 363, 363, 98, 367, 
-	363, 79, 194, 195, 363, 363, 363, 368, 
-	363, 366, 363, 369, 370, 371, 372, 84, 
-	79, 194, 195, 363, 363, 115, 373, 363, 
-	363, 200, 363, 363, 363, 363, 363, 363, 
-	363, 363, 363, 363, 363, 363, 363, 202, 
-	363, 374, 370, 375, 375, 84, 79, 194, 
-	195, 363, 363, 363, 373, 363, 363, 200, 
-	363, 363, 363, 363, 363, 363, 363, 363, 
-	363, 363, 363, 363, 363, 202, 363, 370, 
-	375, 375, 84, 79, 194, 195, 363, 363, 
-	363, 373, 363, 363, 200, 363, 363, 363, 
-	363, 363, 363, 363, 363, 363, 363, 363, 
-	363, 363, 202, 363, 376, 363, 363, 363, 
-	98, 377, 363, 79, 194, 195, 363, 363, 
-	363, 368, 363, 376, 363, 378, 379, 380, 
-	381, 84, 79, 194, 195, 363, 363, 113, 
-	382, 363, 363, 200, 363, 363, 363, 363, 
-	363, 363, 363, 363, 363, 363, 363, 363, 
-	363, 202, 363, 383, 379, 384, 384, 84, 
-	79, 194, 195, 363, 363, 363, 382, 363, 
-	363, 200, 363, 363, 363, 363, 363, 363, 
-	363, 363, 363, 363, 363, 363, 363, 202, 
-	363, 379, 384, 384, 84, 79, 194, 195, 
-	363, 363, 363, 382, 363, 363, 200, 363, 
-	363, 363, 363, 363, 363, 363, 363, 363, 
-	363, 363, 363, 363, 202, 363, 385, 363, 
-	363, 363, 98, 386, 363, 79, 194, 195, 
-	363, 363, 363, 368, 363, 385, 363, 387, 
-	388, 389, 390, 84, 79, 194, 195, 363, 
-	363, 111, 391, 363, 363, 200, 363, 363, 
-	363, 363, 363, 363, 363, 363, 363, 363, 
-	363, 363, 363, 202, 363, 392, 388, 393, 
-	393, 84, 79, 194, 195, 363, 363, 363, 
-	391, 363, 363, 200, 363, 363, 363, 363, 
-	363, 363, 363, 363, 363, 363, 363, 363, 
-	363, 202, 363, 388, 393, 393, 84, 79, 
-	194, 195, 363, 363, 363, 391, 363, 363, 
-	200, 363, 363, 363, 363, 363, 363, 363, 
-	363, 363, 363, 363, 363, 363, 202, 363, 
-	394, 363, 363, 363, 98, 395, 363, 79, 
-	194, 195, 363, 363, 363, 368, 363, 394, 
-	363, 396, 397, 398, 399, 84, 79, 194, 
-	195, 363, 363, 109, 400, 363, 363, 200, 
-	363, 363, 363, 363, 363, 363, 363, 363, 
-	363, 363, 363, 363, 363, 202, 363, 401, 
-	397, 402, 402, 84, 79, 194, 195, 363, 
-	363, 363, 400, 363, 363, 200, 363, 363, 
-	363, 363, 363, 363, 363, 363, 363, 363, 
-	363, 363, 363, 202, 363, 397, 402, 402, 
-	84, 79, 194, 195, 363, 363, 363, 400, 
-	363, 363, 200, 363, 363, 363, 363, 363, 
-	363, 363, 363, 363, 363, 363, 363, 363, 
-	202, 363, 98, 403, 363, 79, 194, 195, 
-	363, 363, 363, 368, 363, 404, 404, 363, 
-	79, 194, 195, 363, 363, 363, 368, 363, 
-	405, 363, 363, 406, 194, 195, 363, 194, 
-	195, 363, 407, 363, 194, 408, 363, 194, 
-	409, 363, 194, 363, 405, 363, 363, 363, 
-	194, 195, 363, 410, 363, 411, 412, 363, 
-	79, 194, 195, 363, 363, 82, 363, 81, 
-	363, 404, 404, 363, 79, 194, 195, 363, 
-	404, 404, 363, 79, 194, 195, 363, 410, 
-	363, 404, 404, 363, 79, 194, 195, 363, 
-	410, 363, 411, 404, 363, 79, 194, 195, 
-	363, 363, 82, 363, 98, 363, 413, 413, 
-	84, 79, 194, 195, 363, 363, 363, 368, 
-	363, 414, 107, 415, 416, 88, 79, 194, 
-	195, 363, 363, 363, 368, 363, 107, 415, 
-	416, 88, 79, 194, 195, 363, 363, 363, 
-	368, 363, 415, 415, 88, 79, 194, 195, 
-	363, 363, 363, 368, 363, 417, 104, 418, 
-	419, 91, 79, 194, 195, 363, 363, 363, 
-	368, 363, 104, 418, 419, 91, 79, 194, 
-	195, 363, 363, 363, 368, 363, 418, 418, 
-	91, 79, 194, 195, 363, 363, 363, 368, 
-	363, 420, 101, 421, 422, 94, 79, 194, 
-	195, 363, 363, 363, 368, 363, 101, 421, 
-	422, 94, 79, 194, 195, 363, 363, 363, 
-	368, 363, 421, 421, 94, 79, 194, 195, 
-	363, 363, 363, 368, 363, 423, 98, 404, 
-	424, 363, 79, 194, 195, 363, 363, 363, 
-	368, 363, 98, 404, 424, 363, 79, 194, 
-	195, 363, 363, 363, 368, 363, 404, 425, 
-	363, 79, 194, 195, 363, 363, 363, 368, 
-	363, 98, 363, 404, 404, 363, 79, 194, 
-	195, 363, 363, 363, 368, 363, 80, 81, 
-	363, 363, 98, 403, 363, 79, 194, 195, 
-	363, 363, 363, 368, 363, 80, 363, 397, 
-	402, 402, 84, 79, 194, 195, 363, 363, 
-	363, 400, 363, 363, 363, 363, 363, 363, 
-	363, 363, 363, 363, 363, 363, 363, 363, 
-	363, 363, 202, 363, 397, 402, 402, 84, 
-	79, 194, 195, 363, 363, 363, 400, 363, 
-	396, 397, 402, 402, 84, 79, 194, 195, 
-	363, 363, 363, 400, 363, 363, 200, 363, 
-	363, 363, 363, 363, 363, 363, 363, 363, 
-	363, 363, 363, 363, 202, 363, 396, 397, 
-	398, 402, 84, 79, 194, 195, 363, 363, 
-	109, 400, 363, 363, 200, 363, 363, 363, 
-	363, 363, 363, 363, 363, 363, 363, 363, 
-	363, 363, 202, 363, 394, 363, 426, 363, 
-	413, 413, 84, 79, 194, 195, 363, 363, 
-	363, 368, 363, 394, 363, 394, 363, 363, 
-	363, 404, 404, 363, 79, 194, 195, 363, 
-	363, 363, 368, 363, 394, 363, 394, 363, 
-	363, 363, 404, 427, 363, 79, 194, 195, 
-	363, 363, 363, 368, 363, 394, 363, 394, 
-	363, 426, 363, 404, 404, 363, 79, 194, 
-	195, 363, 363, 363, 368, 363, 394, 363, 
-	394, 81, 363, 363, 98, 395, 363, 79, 
-	194, 195, 363, 363, 363, 368, 363, 394, 
-	363, 387, 388, 393, 393, 84, 79, 194, 
-	195, 363, 363, 363, 391, 363, 363, 200, 
-	363, 363, 363, 363, 363, 363, 363, 363, 
-	363, 363, 363, 363, 363, 202, 363, 387, 
-	388, 389, 393, 84, 79, 194, 195, 363, 
-	363, 111, 391, 363, 363, 200, 363, 363, 
-	363, 363, 363, 363, 363, 363, 363, 363, 
-	363, 363, 363, 202, 363, 385, 363, 428, 
-	363, 413, 413, 84, 79, 194, 195, 363, 
-	363, 363, 368, 363, 385, 363, 385, 363, 
-	363, 363, 404, 404, 363, 79, 194, 195, 
-	363, 363, 363, 368, 363, 385, 363, 385, 
-	363, 363, 363, 404, 429, 363, 79, 194, 
-	195, 363, 363, 363, 368, 363, 385, 363, 
-	385, 363, 428, 363, 404, 404, 363, 79, 
-	194, 195, 363, 363, 363, 368, 363, 385, 
-	363, 385, 81, 363, 363, 98, 386, 363, 
-	79, 194, 195, 363, 363, 363, 368, 363, 
-	385, 363, 378, 379, 384, 384, 84, 79, 
-	194, 195, 363, 363, 363, 382, 363, 363, 
-	200, 363, 363, 363, 363, 363, 363, 363, 
-	363, 363, 363, 363, 363, 363, 202, 363, 
-	378, 379, 380, 384, 84, 79, 194, 195, 
-	363, 363, 113, 382, 363, 363, 200, 363, 
-	363, 363, 363, 363, 363, 363, 363, 363, 
-	363, 363, 363, 363, 202, 363, 376, 363, 
-	430, 363, 413, 413, 84, 79, 194, 195, 
-	363, 363, 363, 368, 363, 376, 363, 376, 
-	363, 363, 363, 404, 404, 363, 79, 194, 
-	195, 363, 363, 363, 368, 363, 376, 363, 
-	376, 363, 363, 363, 404, 431, 363, 79, 
-	194, 195, 363, 363, 363, 368, 363, 376, 
-	363, 376, 363, 430, 363, 404, 404, 363, 
-	79, 194, 195, 363, 363, 363, 368, 363, 
-	376, 363, 376, 81, 363, 363, 98, 377, 
-	363, 79, 194, 195, 363, 363, 363, 368, 
-	363, 376, 363, 369, 370, 375, 375, 84, 
-	79, 194, 195, 363, 363, 363, 373, 363, 
-	363, 200, 363, 363, 363, 363, 363, 363, 
-	363, 363, 363, 363, 363, 363, 363, 202, 
-	363, 369, 370, 371, 375, 84, 79, 194, 
-	195, 363, 363, 115, 373, 363, 363, 200, 
-	363, 363, 363, 363, 363, 363, 363, 363, 
-	363, 363, 363, 363, 363, 202, 363, 366, 
-	363, 432, 363, 413, 413, 84, 79, 194, 
-	195, 363, 363, 363, 368, 363, 366, 363, 
-	366, 363, 363, 363, 404, 404, 363, 79, 
-	194, 195, 363, 363, 363, 368, 363, 366, 
-	363, 366, 363, 363, 363, 404, 433, 363, 
-	79, 194, 195, 363, 363, 363, 368, 363, 
-	366, 363, 366, 363, 432, 363, 404, 404, 
-	363, 79, 194, 195, 363, 363, 363, 368, 
-	363, 366, 363, 366, 81, 363, 363, 98, 
-	367, 363, 79, 194, 195, 363, 363, 363, 
-	368, 363, 366, 363, 116, 83, 83, 84, 
-	79, 434, 434, 434, 434, 156, 116, 434, 
-	190, 191, 365, 365, 84, 79, 194, 195, 
-	363, 363, 363, 197, 363, 363, 200, 363, 
-	363, 363, 363, 363, 363, 363, 363, 363, 
-	363, 363, 363, 363, 202, 363, 116, 83, 
-	83, 84, 79, 434, 434, 434, 434, 434, 
-	116, 434, 436, 437, 438, 439, 123, 118, 
-	440, 441, 435, 435, 155, 442, 435, 435, 
-	443, 435, 435, 435, 435, 435, 435, 435, 
-	435, 435, 435, 435, 435, 435, 444, 435, 
-	445, 437, 439, 439, 123, 118, 440, 441, 
-	435, 435, 435, 442, 435, 435, 443, 435, 
-	435, 435, 435, 435, 435, 435, 435, 435, 
-	435, 435, 435, 435, 444, 435, 437, 439, 
-	439, 123, 118, 440, 441, 435, 435, 435, 
-	442, 435, 435, 443, 435, 435, 435, 435, 
-	435, 435, 435, 435, 435, 435, 435, 435, 
-	435, 444, 435, 446, 435, 435, 435, 136, 
-	447, 435, 118, 440, 441, 435, 435, 435, 
-	448, 435, 446, 435, 449, 450, 451, 452, 
-	123, 118, 440, 441, 435, 435, 153, 453, 
-	435, 435, 443, 435, 435, 435, 435, 435, 
-	435, 435, 435, 435, 435, 435, 435, 435, 
-	444, 435, 454, 450, 455, 455, 123, 118, 
-	440, 441, 435, 435, 435, 453, 435, 435, 
-	443, 435, 435, 435, 435, 435, 435, 435, 
-	435, 435, 435, 435, 435, 435, 444, 435, 
-	450, 455, 455, 123, 118, 440, 441, 435, 
-	435, 435, 453, 435, 435, 443, 435, 435, 
-	435, 435, 435, 435, 435, 435, 435, 435, 
-	435, 435, 435, 444, 435, 456, 435, 435, 
-	435, 136, 457, 435, 118, 440, 441, 435, 
-	435, 435, 448, 435, 456, 435, 458, 459, 
-	460, 461, 123, 118, 440, 441, 435, 435, 
-	151, 462, 435, 435, 443, 435, 435, 435, 
-	435, 435, 435, 435, 435, 435, 435, 435, 
-	435, 435, 444, 435, 463, 459, 464, 464, 
-	123, 118, 440, 441, 435, 435, 435, 462, 
-	435, 435, 443, 435, 435, 435, 435, 435, 
-	435, 435, 435, 435, 435, 435, 435, 435, 
-	444, 435, 459, 464, 464, 123, 118, 440, 
-	441, 435, 435, 435, 462, 435, 435, 443, 
-	435, 435, 435, 435, 435, 435, 435, 435, 
-	435, 435, 435, 435, 435, 444, 435, 465, 
-	435, 435, 435, 136, 466, 435, 118, 440, 
-	441, 435, 435, 435, 448, 435, 465, 435, 
-	467, 468, 469, 470, 123, 118, 440, 441, 
-	435, 435, 149, 471, 435, 435, 443, 435, 
-	435, 435, 435, 435, 435, 435, 435, 435, 
-	435, 435, 435, 435, 444, 435, 472, 468, 
-	473, 473, 123, 118, 440, 441, 435, 435, 
-	435, 471, 435, 435, 443, 435, 435, 435, 
-	435, 435, 435, 435, 435, 435, 435, 435, 
-	435, 435, 444, 435, 468, 473, 473, 123, 
-	118, 440, 441, 435, 435, 435, 471, 435, 
-	435, 443, 435, 435, 435, 435, 435, 435, 
-	435, 435, 435, 435, 435, 435, 435, 444, 
-	435, 474, 435, 435, 435, 136, 475, 435, 
-	118, 440, 441, 435, 435, 435, 448, 435, 
-	474, 435, 476, 477, 478, 479, 123, 118, 
-	440, 441, 435, 435, 147, 480, 435, 435, 
-	443, 435, 435, 435, 435, 435, 435, 435, 
-	435, 435, 435, 435, 435, 435, 444, 435, 
-	481, 477, 482, 482, 123, 118, 440, 441, 
-	435, 435, 435, 480, 435, 435, 443, 435, 
-	435, 435, 435, 435, 435, 435, 435, 435, 
-	435, 435, 435, 435, 444, 435, 477, 482, 
-	482, 123, 118, 440, 441, 435, 435, 435, 
-	480, 435, 435, 443, 435, 435, 435, 435, 
-	435, 435, 435, 435, 435, 435, 435, 435, 
-	435, 444, 435, 136, 483, 435, 118, 440, 
-	441, 435, 435, 435, 448, 435, 484, 484, 
-	435, 118, 440, 441, 435, 435, 435, 448, 
-	435, 485, 435, 435, 486, 440, 441, 435, 
-	440, 441, 435, 487, 435, 440, 488, 435, 
-	440, 489, 435, 440, 435, 485, 435, 435, 
-	435, 440, 441, 435, 490, 435, 491, 492, 
-	435, 118, 440, 441, 435, 435, 121, 435, 
-	120, 435, 484, 484, 435, 118, 440, 441, 
-	435, 484, 484, 435, 118, 440, 441, 435, 
-	490, 435, 484, 484, 435, 118, 440, 441, 
-	435, 490, 435, 491, 484, 435, 118, 440, 
-	441, 435, 435, 121, 435, 136, 435, 493, 
-	493, 123, 118, 440, 441, 435, 435, 435, 
-	448, 435, 494, 145, 495, 496, 126, 118, 
-	440, 441, 435, 435, 435, 448, 435, 145, 
-	495, 496, 126, 118, 440, 441, 435, 435, 
-	435, 448, 435, 495, 495, 126, 118, 440, 
-	441, 435, 435, 435, 448, 435, 497, 142, 
-	498, 499, 129, 118, 440, 441, 435, 435, 
-	435, 448, 435, 142, 498, 499, 129, 118, 
-	440, 441, 435, 435, 435, 448, 435, 498, 
-	498, 129, 118, 440, 441, 435, 435, 435, 
-	448, 435, 500, 139, 501, 502, 132, 118, 
-	440, 441, 435, 435, 435, 448, 435, 139, 
-	501, 502, 132, 118, 440, 441, 435, 435, 
-	435, 448, 435, 501, 501, 132, 118, 440, 
-	441, 435, 435, 435, 448, 435, 503, 136, 
-	484, 504, 435, 118, 440, 441, 435, 435, 
-	435, 448, 435, 136, 484, 504, 435, 118, 
-	440, 441, 435, 435, 435, 448, 435, 484, 
-	505, 435, 118, 440, 441, 435, 435, 435, 
-	448, 435, 136, 435, 484, 484, 435, 118, 
-	440, 441, 435, 435, 435, 448, 435, 119, 
-	120, 435, 435, 136, 483, 435, 118, 440, 
-	441, 435, 435, 435, 448, 435, 119, 435, 
-	477, 482, 482, 123, 118, 440, 441, 435, 
-	435, 435, 480, 435, 435, 435, 435, 435, 
-	435, 435, 435, 435, 435, 435, 435, 435, 
-	435, 435, 435, 444, 435, 477, 482, 482, 
-	123, 118, 440, 441, 435, 435, 435, 480, 
-	435, 476, 477, 482, 482, 123, 118, 440, 
-	441, 435, 435, 435, 480, 435, 435, 443, 
-	435, 435, 435, 435, 435, 435, 435, 435, 
-	435, 435, 435, 435, 435, 444, 435, 476, 
-	477, 478, 482, 123, 118, 440, 441, 435, 
-	435, 147, 480, 435, 435, 443, 435, 435, 
-	435, 435, 435, 435, 435, 435, 435, 435, 
-	435, 435, 435, 444, 435, 474, 435, 506, 
-	435, 493, 493, 123, 118, 440, 441, 435, 
-	435, 435, 448, 435, 474, 435, 474, 435, 
-	435, 435, 484, 484, 435, 118, 440, 441, 
-	435, 435, 435, 448, 435, 474, 435, 474, 
-	435, 435, 435, 484, 507, 435, 118, 440, 
-	441, 435, 435, 435, 448, 435, 474, 435, 
-	474, 435, 506, 435, 484, 484, 435, 118, 
-	440, 441, 435, 435, 435, 448, 435, 474, 
-	435, 474, 120, 435, 435, 136, 475, 435, 
-	118, 440, 441, 435, 435, 435, 448, 435, 
-	474, 435, 467, 468, 473, 473, 123, 118, 
-	440, 441, 435, 435, 435, 471, 435, 435, 
-	443, 435, 435, 435, 435, 435, 435, 435, 
-	435, 435, 435, 435, 435, 435, 444, 435, 
-	467, 468, 469, 473, 123, 118, 440, 441, 
-	435, 435, 149, 471, 435, 435, 443, 435, 
-	435, 435, 435, 435, 435, 435, 435, 435, 
-	435, 435, 435, 435, 444, 435, 465, 435, 
-	508, 435, 493, 493, 123, 118, 440, 441, 
-	435, 435, 435, 448, 435, 465, 435, 465, 
-	435, 435, 435, 484, 484, 435, 118, 440, 
-	441, 435, 435, 435, 448, 435, 465, 435, 
-	465, 435, 435, 435, 484, 509, 435, 118, 
-	440, 441, 435, 435, 435, 448, 435, 465, 
-	435, 465, 435, 508, 435, 484, 484, 435, 
-	118, 440, 441, 435, 435, 435, 448, 435, 
-	465, 435, 465, 120, 435, 435, 136, 466, 
-	435, 118, 440, 441, 435, 435, 435, 448, 
-	435, 465, 435, 458, 459, 464, 464, 123, 
-	118, 440, 441, 435, 435, 435, 462, 435, 
-	435, 443, 435, 435, 435, 435, 435, 435, 
-	435, 435, 435, 435, 435, 435, 435, 444, 
-	435, 458, 459, 460, 464, 123, 118, 440, 
-	441, 435, 435, 151, 462, 435, 435, 443, 
-	435, 435, 435, 435, 435, 435, 435, 435, 
-	435, 435, 435, 435, 435, 444, 435, 456, 
-	435, 510, 435, 493, 493, 123, 118, 440, 
-	441, 435, 435, 435, 448, 435, 456, 435, 
-	456, 435, 435, 435, 484, 484, 435, 118, 
-	440, 441, 435, 435, 435, 448, 435, 456, 
-	435, 456, 435, 435, 435, 484, 511, 435, 
-	118, 440, 441, 435, 435, 435, 448, 435, 
-	456, 435, 456, 435, 510, 435, 484, 484, 
-	435, 118, 440, 441, 435, 435, 435, 448, 
-	435, 456, 435, 456, 120, 435, 435, 136, 
-	457, 435, 118, 440, 441, 435, 435, 435, 
-	448, 435, 456, 435, 449, 450, 455, 455, 
-	123, 118, 440, 441, 435, 435, 435, 453, 
-	435, 435, 443, 435, 435, 435, 435, 435, 
-	435, 435, 435, 435, 435, 435, 435, 435, 
-	444, 435, 449, 450, 451, 455, 123, 118, 
-	440, 441, 435, 435, 153, 453, 435, 435, 
-	443, 435, 435, 435, 435, 435, 435, 435, 
-	435, 435, 435, 435, 435, 435, 444, 435, 
-	446, 435, 512, 435, 493, 493, 123, 118, 
-	440, 441, 435, 435, 435, 448, 435, 446, 
-	435, 446, 435, 435, 435, 484, 484, 435, 
-	118, 440, 441, 435, 435, 435, 448, 435, 
-	446, 435, 446, 435, 435, 435, 484, 513, 
-	435, 118, 440, 441, 435, 435, 435, 448, 
-	435, 446, 435, 446, 435, 512, 435, 484, 
-	484, 435, 118, 440, 441, 435, 435, 435, 
-	448, 435, 446, 435, 446, 120, 435, 435, 
-	136, 447, 435, 118, 440, 441, 435, 435, 
-	435, 448, 435, 446, 435, 436, 437, 439, 
-	439, 123, 118, 440, 441, 435, 435, 435, 
-	442, 435, 435, 443, 435, 435, 435, 435, 
-	435, 435, 435, 435, 435, 435, 435, 435, 
-	435, 444, 435, 188, 189, 190, 191, 514, 
-	365, 84, 79, 194, 195, 196, 196, 156, 
-	197, 363, 188, 200, 363, 363, 363, 363, 
-	363, 363, 363, 363, 363, 363, 363, 363, 
-	363, 202, 363, 204, 515, 206, 207, 6, 
-	1, 208, 209, 203, 203, 38, 210, 203, 
-	203, 211, 203, 203, 203, 203, 203, 203, 
-	203, 203, 203, 203, 203, 203, 203, 212, 
-	203, 215, 189, 190, 191, 516, 517, 84, 
-	157, 518, 519, 203, 196, 156, 520, 203, 
-	215, 200, 203, 203, 203, 203, 203, 203, 
-	203, 203, 203, 203, 203, 203, 203, 202, 
-	203, 116, 521, 521, 84, 157, 208, 209, 
-	203, 203, 156, 522, 203, 523, 203, 203, 
-	524, 518, 519, 203, 518, 519, 203, 256, 
-	203, 518, 525, 203, 518, 526, 203, 518, 
-	203, 523, 203, 203, 203, 518, 519, 203, 
-	527, 3, 363, 363, 404, 433, 363, 79, 
-	194, 195, 363, 363, 363, 368, 363, 527, 
-	363, 528, 370, 529, 530, 84, 157, 518, 
-	519, 203, 203, 158, 373, 203, 203, 200, 
-	203, 203, 203, 203, 203, 203, 203, 203, 
-	203, 203, 203, 203, 203, 202, 203, 531, 
-	370, 532, 532, 84, 157, 518, 519, 203, 
-	203, 203, 373, 203, 203, 200, 203, 203, 
-	203, 203, 203, 203, 203, 203, 203, 203, 
-	203, 203, 203, 202, 203, 370, 532, 532, 
-	84, 157, 518, 519, 203, 203, 203, 373, 
-	203, 203, 200, 203, 203, 203, 203, 203, 
-	203, 203, 203, 203, 203, 203, 203, 203, 
-	202, 203, 528, 370, 532, 532, 84, 157, 
-	518, 519, 203, 203, 203, 373, 203, 203, 
-	200, 203, 203, 203, 203, 203, 203, 203, 
-	203, 203, 203, 203, 203, 203, 202, 203, 
-	528, 370, 529, 532, 84, 157, 518, 519, 
-	203, 203, 158, 373, 203, 203, 200, 203, 
-	203, 203, 203, 203, 203, 203, 203, 203, 
-	203, 203, 203, 203, 202, 203, 215, 203, 
-	281, 116, 533, 533, 160, 157, 208, 209, 
-	203, 203, 203, 522, 203, 215, 203, 534, 
-	184, 535, 536, 162, 157, 518, 519, 203, 
-	203, 203, 537, 203, 184, 535, 536, 162, 
-	157, 518, 519, 203, 203, 203, 537, 203, 
-	535, 535, 162, 157, 518, 519, 203, 203, 
-	203, 537, 203, 538, 181, 539, 540, 165, 
-	157, 518, 519, 203, 203, 203, 537, 203, 
-	181, 539, 540, 165, 157, 518, 519, 203, 
-	203, 203, 537, 203, 539, 539, 165, 157, 
-	518, 519, 203, 203, 203, 537, 203, 541, 
-	178, 542, 543, 168, 157, 518, 519, 203, 
-	203, 203, 537, 203, 178, 542, 543, 168, 
-	157, 518, 519, 203, 203, 203, 537, 203, 
-	542, 542, 168, 157, 518, 519, 203, 203, 
-	203, 537, 203, 544, 175, 545, 546, 203, 
-	157, 518, 519, 203, 203, 203, 537, 203, 
-	175, 545, 546, 203, 157, 518, 519, 203, 
-	203, 203, 537, 203, 545, 545, 203, 157, 
-	518, 519, 203, 203, 203, 537, 203, 547, 
-	203, 548, 549, 203, 157, 518, 519, 203, 
-	203, 172, 203, 171, 203, 545, 545, 203, 
-	157, 518, 519, 203, 545, 545, 203, 157, 
-	518, 519, 203, 547, 203, 545, 545, 203, 
-	157, 518, 519, 203, 547, 203, 548, 545, 
-	203, 157, 518, 519, 203, 203, 172, 203, 
-	527, 171, 363, 363, 98, 367, 363, 79, 
-	194, 195, 363, 363, 363, 368, 363, 527, 
-	363, 551, 550, 552, 552, 550, 186, 553, 
-	554, 550, 552, 552, 550, 186, 553, 554, 
-	550, 555, 550, 550, 556, 553, 554, 550, 
-	553, 554, 550, 557, 550, 553, 558, 550, 
-	553, 559, 550, 553, 550, 555, 550, 550, 
-	550, 553, 554, 550, 0
+	197, 198, 199, 200, 201, 187, 203, 204, 
+	205, 206, 6, 1, 207, 208, 202, 202, 
+	38, 209, 202, 202, 210, 202, 211, 204, 
+	212, 212, 6, 1, 207, 208, 202, 202, 
+	202, 209, 202, 202, 210, 202, 204, 212, 
+	212, 6, 1, 207, 208, 202, 202, 202, 
+	209, 202, 202, 210, 202, 213, 202, 202, 
+	202, 19, 214, 202, 1, 207, 208, 202, 
+	202, 202, 215, 202, 213, 202, 216, 217, 
+	218, 219, 6, 1, 207, 208, 202, 202, 
+	36, 220, 202, 202, 210, 202, 221, 217, 
+	222, 222, 6, 1, 207, 208, 202, 202, 
+	202, 220, 202, 202, 210, 202, 217, 222, 
+	222, 6, 1, 207, 208, 202, 202, 202, 
+	220, 202, 202, 210, 202, 223, 202, 202, 
+	202, 19, 224, 202, 1, 207, 208, 202, 
+	202, 202, 215, 202, 223, 202, 225, 226, 
+	227, 228, 6, 1, 207, 208, 202, 202, 
+	34, 229, 202, 202, 210, 202, 230, 226, 
+	231, 231, 6, 1, 207, 208, 202, 202, 
+	202, 229, 202, 202, 210, 202, 226, 231, 
+	231, 6, 1, 207, 208, 202, 202, 202, 
+	229, 202, 202, 210, 202, 232, 202, 202, 
+	202, 19, 233, 202, 1, 207, 208, 202, 
+	202, 202, 215, 202, 232, 202, 234, 235, 
+	236, 237, 6, 1, 207, 208, 202, 202, 
+	32, 238, 202, 202, 210, 202, 239, 235, 
+	240, 240, 6, 1, 207, 208, 202, 202, 
+	202, 238, 202, 202, 210, 202, 235, 240, 
+	240, 6, 1, 207, 208, 202, 202, 202, 
+	238, 202, 202, 210, 202, 241, 202, 202, 
+	202, 19, 242, 202, 1, 207, 208, 202, 
+	202, 202, 215, 202, 241, 202, 243, 244, 
+	245, 246, 6, 1, 207, 208, 202, 202, 
+	30, 247, 202, 202, 210, 202, 248, 244, 
+	249, 249, 6, 1, 207, 208, 202, 202, 
+	202, 247, 202, 202, 210, 202, 244, 249, 
+	249, 6, 1, 207, 208, 202, 202, 202, 
+	247, 202, 202, 210, 202, 19, 250, 202, 
+	1, 207, 208, 202, 202, 202, 215, 202, 
+	251, 251, 202, 1, 207, 208, 202, 202, 
+	202, 215, 202, 252, 202, 202, 253, 207, 
+	208, 202, 207, 208, 202, 254, 202, 207, 
+	255, 202, 207, 256, 202, 207, 202, 252, 
+	202, 202, 202, 207, 208, 202, 257, 202, 
+	258, 259, 202, 1, 207, 208, 202, 202, 
+	4, 202, 3, 202, 251, 251, 202, 1, 
+	207, 208, 202, 251, 251, 202, 1, 207, 
+	208, 202, 257, 202, 251, 251, 202, 1, 
+	207, 208, 202, 257, 202, 258, 251, 202, 
+	1, 207, 208, 202, 202, 4, 202, 19, 
+	202, 260, 260, 6, 1, 207, 208, 202, 
+	202, 202, 215, 202, 261, 28, 262, 263, 
+	9, 1, 207, 208, 202, 202, 202, 215, 
+	202, 28, 262, 263, 9, 1, 207, 208, 
+	202, 202, 202, 215, 202, 262, 262, 9, 
+	1, 207, 208, 202, 202, 202, 215, 202, 
+	264, 25, 265, 266, 12, 1, 207, 208, 
+	202, 202, 202, 215, 202, 25, 265, 266, 
+	12, 1, 207, 208, 202, 202, 202, 215, 
+	202, 265, 265, 12, 1, 207, 208, 202, 
+	202, 202, 215, 202, 267, 22, 268, 269, 
+	15, 1, 207, 208, 202, 202, 202, 215, 
+	202, 22, 268, 269, 15, 1, 207, 208, 
+	202, 202, 202, 215, 202, 268, 268, 15, 
+	1, 207, 208, 202, 202, 202, 215, 202, 
+	270, 19, 251, 271, 202, 1, 207, 208, 
+	202, 202, 202, 215, 202, 19, 251, 271, 
+	202, 1, 207, 208, 202, 202, 202, 215, 
+	202, 251, 272, 202, 1, 207, 208, 202, 
+	202, 202, 215, 202, 19, 202, 251, 251, 
+	202, 1, 207, 208, 202, 202, 202, 215, 
+	202, 2, 3, 202, 202, 19, 250, 202, 
+	1, 207, 208, 202, 202, 202, 215, 202, 
+	2, 202, 244, 249, 249, 6, 1, 207, 
+	208, 202, 202, 202, 247, 202, 243, 244, 
+	249, 249, 6, 1, 207, 208, 202, 202, 
+	202, 247, 202, 202, 210, 202, 243, 244, 
+	245, 249, 6, 1, 207, 208, 202, 202, 
+	30, 247, 202, 202, 210, 202, 241, 202, 
+	273, 202, 260, 260, 6, 1, 207, 208, 
+	202, 202, 202, 215, 202, 241, 202, 241, 
+	202, 202, 202, 251, 251, 202, 1, 207, 
+	208, 202, 202, 202, 215, 202, 241, 202, 
+	241, 202, 202, 202, 251, 274, 202, 1, 
+	207, 208, 202, 202, 202, 215, 202, 241, 
+	202, 241, 202, 273, 202, 251, 251, 202, 
+	1, 207, 208, 202, 202, 202, 215, 202, 
+	241, 202, 241, 3, 202, 202, 19, 242, 
+	202, 1, 207, 208, 202, 202, 202, 215, 
+	202, 241, 202, 234, 235, 240, 240, 6, 
+	1, 207, 208, 202, 202, 202, 238, 202, 
+	202, 210, 202, 234, 235, 236, 240, 6, 
+	1, 207, 208, 202, 202, 32, 238, 202, 
+	202, 210, 202, 232, 202, 275, 202, 260, 
+	260, 6, 1, 207, 208, 202, 202, 202, 
+	215, 202, 232, 202, 232, 202, 202, 202, 
+	251, 251, 202, 1, 207, 208, 202, 202, 
+	202, 215, 202, 232, 202, 232, 202, 202, 
+	202, 251, 276, 202, 1, 207, 208, 202, 
+	202, 202, 215, 202, 232, 202, 232, 202, 
+	275, 202, 251, 251, 202, 1, 207, 208, 
+	202, 202, 202, 215, 202, 232, 202, 232, 
+	3, 202, 202, 19, 233, 202, 1, 207, 
+	208, 202, 202, 202, 215, 202, 232, 202, 
+	225, 226, 231, 231, 6, 1, 207, 208, 
+	202, 202, 202, 229, 202, 202, 210, 202, 
+	225, 226, 227, 231, 6, 1, 207, 208, 
+	202, 202, 34, 229, 202, 202, 210, 202, 
+	223, 202, 277, 202, 260, 260, 6, 1, 
+	207, 208, 202, 202, 202, 215, 202, 223, 
+	202, 223, 202, 202, 202, 251, 251, 202, 
+	1, 207, 208, 202, 202, 202, 215, 202, 
+	223, 202, 223, 202, 202, 202, 251, 278, 
+	202, 1, 207, 208, 202, 202, 202, 215, 
+	202, 223, 202, 223, 202, 277, 202, 251, 
+	251, 202, 1, 207, 208, 202, 202, 202, 
+	215, 202, 223, 202, 223, 3, 202, 202, 
+	19, 224, 202, 1, 207, 208, 202, 202, 
+	202, 215, 202, 223, 202, 216, 217, 222, 
+	222, 6, 1, 207, 208, 202, 202, 202, 
+	220, 202, 202, 210, 202, 216, 217, 218, 
+	222, 6, 1, 207, 208, 202, 202, 36, 
+	220, 202, 202, 210, 202, 213, 202, 279, 
+	202, 260, 260, 6, 1, 207, 208, 202, 
+	202, 202, 215, 202, 213, 202, 213, 202, 
+	202, 202, 251, 251, 202, 1, 207, 208, 
+	202, 202, 202, 215, 202, 213, 202, 213, 
+	202, 202, 202, 251, 280, 202, 1, 207, 
+	208, 202, 202, 202, 215, 202, 213, 202, 
+	213, 202, 279, 202, 251, 251, 202, 1, 
+	207, 208, 202, 202, 202, 215, 202, 213, 
+	202, 213, 3, 202, 202, 19, 214, 202, 
+	1, 207, 208, 202, 202, 202, 215, 202, 
+	213, 202, 203, 204, 212, 212, 6, 1, 
+	207, 208, 202, 202, 202, 209, 202, 202, 
+	210, 202, 203, 204, 205, 212, 6, 1, 
+	207, 208, 202, 202, 38, 209, 202, 202, 
+	210, 202, 282, 283, 284, 285, 45, 40, 
+	286, 287, 281, 281, 77, 288, 281, 281, 
+	289, 281, 290, 283, 291, 285, 45, 40, 
+	286, 287, 281, 281, 281, 288, 281, 281, 
+	289, 281, 283, 291, 285, 45, 40, 286, 
+	287, 281, 281, 281, 288, 281, 281, 289, 
+	281, 292, 281, 281, 281, 58, 293, 281, 
+	40, 286, 287, 281, 281, 281, 294, 281, 
+	292, 281, 295, 296, 297, 298, 45, 40, 
+	286, 287, 281, 281, 75, 299, 281, 281, 
+	289, 281, 300, 296, 301, 301, 45, 40, 
+	286, 287, 281, 281, 281, 299, 281, 281, 
+	289, 281, 296, 301, 301, 45, 40, 286, 
+	287, 281, 281, 281, 299, 281, 281, 289, 
+	281, 302, 281, 281, 281, 58, 303, 281, 
+	40, 286, 287, 281, 281, 281, 294, 281, 
+	302, 281, 304, 305, 306, 307, 45, 40, 
+	286, 287, 281, 281, 73, 308, 281, 281, 
+	289, 281, 309, 305, 310, 310, 45, 40, 
+	286, 287, 281, 281, 281, 308, 281, 281, 
+	289, 281, 305, 310, 310, 45, 40, 286, 
+	287, 281, 281, 281, 308, 281, 281, 289, 
+	281, 311, 281, 281, 281, 58, 312, 281, 
+	40, 286, 287, 281, 281, 281, 294, 281, 
+	311, 281, 313, 314, 315, 316, 45, 40, 
+	286, 287, 281, 281, 71, 317, 281, 281, 
+	289, 281, 318, 314, 319, 319, 45, 40, 
+	286, 287, 281, 281, 281, 317, 281, 281, 
+	289, 281, 314, 319, 319, 45, 40, 286, 
+	287, 281, 281, 281, 317, 281, 281, 289, 
+	281, 320, 281, 281, 281, 58, 321, 281, 
+	40, 286, 287, 281, 281, 281, 294, 281, 
+	320, 281, 322, 323, 324, 325, 45, 40, 
+	286, 287, 281, 281, 69, 326, 281, 281, 
+	289, 281, 327, 323, 328, 328, 45, 40, 
+	286, 287, 281, 281, 281, 326, 281, 281, 
+	289, 281, 323, 328, 328, 45, 40, 286, 
+	287, 281, 281, 281, 326, 281, 281, 289, 
+	281, 58, 329, 281, 40, 286, 287, 281, 
+	281, 281, 294, 281, 330, 330, 281, 40, 
+	286, 287, 281, 281, 281, 294, 281, 331, 
+	281, 281, 332, 286, 287, 281, 286, 287, 
+	281, 333, 281, 286, 334, 281, 286, 335, 
+	281, 286, 281, 331, 281, 281, 281, 286, 
+	287, 281, 336, 281, 337, 338, 281, 40, 
+	286, 287, 281, 281, 43, 281, 42, 281, 
+	330, 330, 281, 40, 286, 287, 281, 330, 
+	330, 281, 40, 286, 287, 281, 336, 281, 
+	330, 330, 281, 40, 286, 287, 281, 336, 
+	281, 337, 330, 281, 40, 286, 287, 281, 
+	281, 43, 281, 58, 281, 339, 339, 45, 
+	40, 286, 287, 281, 281, 281, 294, 281, 
+	340, 67, 341, 342, 48, 40, 286, 287, 
+	281, 281, 281, 294, 281, 67, 341, 342, 
+	48, 40, 286, 287, 281, 281, 281, 294, 
+	281, 341, 341, 48, 40, 286, 287, 281, 
+	281, 281, 294, 281, 343, 64, 344, 345, 
+	51, 40, 286, 287, 281, 281, 281, 294, 
+	281, 64, 344, 345, 51, 40, 286, 287, 
+	281, 281, 281, 294, 281, 344, 344, 51, 
+	40, 286, 287, 281, 281, 281, 294, 281, 
+	346, 61, 347, 348, 54, 40, 286, 287, 
+	281, 281, 281, 294, 281, 61, 347, 348, 
+	54, 40, 286, 287, 281, 281, 281, 294, 
+	281, 347, 347, 54, 40, 286, 287, 281, 
+	281, 281, 294, 281, 349, 58, 330, 350, 
+	281, 40, 286, 287, 281, 281, 281, 294, 
+	281, 58, 330, 350, 281, 40, 286, 287, 
+	281, 281, 281, 294, 281, 330, 351, 281, 
+	40, 286, 287, 281, 281, 281, 294, 281, 
+	58, 281, 330, 330, 281, 40, 286, 287, 
+	281, 281, 281, 294, 281, 41, 42, 281, 
+	281, 58, 329, 281, 40, 286, 287, 281, 
+	281, 281, 294, 281, 41, 281, 323, 328, 
+	328, 45, 40, 286, 287, 281, 281, 281, 
+	326, 281, 322, 323, 328, 328, 45, 40, 
+	286, 287, 281, 281, 281, 326, 281, 281, 
+	289, 281, 322, 323, 324, 328, 45, 40, 
+	286, 287, 281, 281, 69, 326, 281, 281, 
+	289, 281, 320, 281, 352, 281, 339, 339, 
+	45, 40, 286, 287, 281, 281, 281, 294, 
+	281, 320, 281, 320, 281, 281, 281, 330, 
+	330, 281, 40, 286, 287, 281, 281, 281, 
+	294, 281, 320, 281, 320, 281, 281, 281, 
+	330, 353, 281, 40, 286, 287, 281, 281, 
+	281, 294, 281, 320, 281, 320, 281, 352, 
+	281, 330, 330, 281, 40, 286, 287, 281, 
+	281, 281, 294, 281, 320, 281, 320, 42, 
+	281, 281, 58, 321, 281, 40, 286, 287, 
+	281, 281, 281, 294, 281, 320, 281, 313, 
+	314, 319, 319, 45, 40, 286, 287, 281, 
+	281, 281, 317, 281, 281, 289, 281, 313, 
+	314, 315, 319, 45, 40, 286, 287, 281, 
+	281, 71, 317, 281, 281, 289, 281, 311, 
+	281, 354, 281, 339, 339, 45, 40, 286, 
+	287, 281, 281, 281, 294, 281, 311, 281, 
+	311, 281, 281, 281, 330, 330, 281, 40, 
+	286, 287, 281, 281, 281, 294, 281, 311, 
+	281, 311, 281, 281, 281, 330, 355, 281, 
+	40, 286, 287, 281, 281, 281, 294, 281, 
+	311, 281, 311, 281, 354, 281, 330, 330, 
+	281, 40, 286, 287, 281, 281, 281, 294, 
+	281, 311, 281, 311, 42, 281, 281, 58, 
+	312, 281, 40, 286, 287, 281, 281, 281, 
+	294, 281, 311, 281, 304, 305, 310, 310, 
+	45, 40, 286, 287, 281, 281, 281, 308, 
+	281, 281, 289, 281, 304, 305, 306, 310, 
+	45, 40, 286, 287, 281, 281, 73, 308, 
+	281, 281, 289, 281, 302, 281, 356, 281, 
+	339, 339, 45, 40, 286, 287, 281, 281, 
+	281, 294, 281, 302, 281, 302, 281, 281, 
+	281, 330, 330, 281, 40, 286, 287, 281, 
+	281, 281, 294, 281, 302, 281, 302, 281, 
+	281, 281, 330, 357, 281, 40, 286, 287, 
+	281, 281, 281, 294, 281, 302, 281, 302, 
+	281, 356, 281, 330, 330, 281, 40, 286, 
+	287, 281, 281, 281, 294, 281, 302, 281, 
+	302, 42, 281, 281, 58, 303, 281, 40, 
+	286, 287, 281, 281, 281, 294, 281, 302, 
+	281, 295, 296, 301, 301, 45, 40, 286, 
+	287, 281, 281, 281, 299, 281, 281, 289, 
+	281, 295, 296, 297, 301, 45, 40, 286, 
+	287, 281, 281, 75, 299, 281, 281, 289, 
+	281, 292, 281, 358, 281, 339, 339, 45, 
+	40, 286, 287, 281, 281, 281, 294, 281, 
+	292, 281, 292, 281, 281, 281, 330, 330, 
+	281, 40, 286, 287, 281, 281, 281, 294, 
+	281, 292, 281, 292, 281, 281, 281, 330, 
+	359, 281, 40, 286, 287, 281, 281, 281, 
+	294, 281, 292, 281, 292, 281, 358, 281, 
+	330, 330, 281, 40, 286, 287, 281, 281, 
+	281, 294, 281, 292, 281, 76, 44, 44, 
+	45, 40, 281, 281, 281, 281, 281, 76, 
+	281, 292, 42, 281, 281, 58, 293, 281, 
+	40, 286, 287, 281, 281, 281, 294, 281, 
+	292, 281, 282, 283, 291, 285, 45, 40, 
+	286, 287, 281, 281, 281, 288, 281, 281, 
+	289, 281, 361, 191, 362, 362, 84, 79, 
+	194, 195, 360, 360, 360, 197, 360, 360, 
+	200, 360, 191, 362, 362, 84, 79, 194, 
+	195, 360, 360, 360, 197, 360, 360, 200, 
+	360, 363, 360, 360, 360, 98, 364, 360, 
+	79, 194, 195, 360, 360, 360, 365, 360, 
+	363, 360, 366, 367, 368, 369, 84, 79, 
+	194, 195, 360, 360, 115, 370, 360, 360, 
+	200, 360, 371, 367, 372, 372, 84, 79, 
+	194, 195, 360, 360, 360, 370, 360, 360, 
+	200, 360, 367, 372, 372, 84, 79, 194, 
+	195, 360, 360, 360, 370, 360, 360, 200, 
+	360, 373, 360, 360, 360, 98, 374, 360, 
+	79, 194, 195, 360, 360, 360, 365, 360, 
+	373, 360, 375, 376, 377, 378, 84, 79, 
+	194, 195, 360, 360, 113, 379, 360, 360, 
+	200, 360, 380, 376, 381, 381, 84, 79, 
+	194, 195, 360, 360, 360, 379, 360, 360, 
+	200, 360, 376, 381, 381, 84, 79, 194, 
+	195, 360, 360, 360, 379, 360, 360, 200, 
+	360, 382, 360, 360, 360, 98, 383, 360, 
+	79, 194, 195, 360, 360, 360, 365, 360, 
+	382, 360, 384, 385, 386, 387, 84, 79, 
+	194, 195, 360, 360, 111, 388, 360, 360, 
+	200, 360, 389, 385, 390, 390, 84, 79, 
+	194, 195, 360, 360, 360, 388, 360, 360, 
+	200, 360, 385, 390, 390, 84, 79, 194, 
+	195, 360, 360, 360, 388, 360, 360, 200, 
+	360, 391, 360, 360, 360, 98, 392, 360, 
+	79, 194, 195, 360, 360, 360, 365, 360, 
+	391, 360, 393, 394, 395, 396, 84, 79, 
+	194, 195, 360, 360, 109, 397, 360, 360, 
+	200, 360, 398, 394, 399, 399, 84, 79, 
+	194, 195, 360, 360, 360, 397, 360, 360, 
+	200, 360, 394, 399, 399, 84, 79, 194, 
+	195, 360, 360, 360, 397, 360, 360, 200, 
+	360, 98, 400, 360, 79, 194, 195, 360, 
+	360, 360, 365, 360, 401, 401, 360, 79, 
+	194, 195, 360, 360, 360, 365, 360, 402, 
+	360, 360, 403, 194, 195, 360, 194, 195, 
+	360, 404, 360, 194, 405, 360, 194, 406, 
+	360, 194, 360, 402, 360, 360, 360, 194, 
+	195, 360, 407, 360, 408, 409, 360, 79, 
+	194, 195, 360, 360, 82, 360, 81, 360, 
+	401, 401, 360, 79, 194, 195, 360, 401, 
+	401, 360, 79, 194, 195, 360, 407, 360, 
+	401, 401, 360, 79, 194, 195, 360, 407, 
+	360, 408, 401, 360, 79, 194, 195, 360, 
+	360, 82, 360, 98, 360, 410, 410, 84, 
+	79, 194, 195, 360, 360, 360, 365, 360, 
+	411, 107, 412, 413, 88, 79, 194, 195, 
+	360, 360, 360, 365, 360, 107, 412, 413, 
+	88, 79, 194, 195, 360, 360, 360, 365, 
+	360, 412, 412, 88, 79, 194, 195, 360, 
+	360, 360, 365, 360, 414, 104, 415, 416, 
+	91, 79, 194, 195, 360, 360, 360, 365, 
+	360, 104, 415, 416, 91, 79, 194, 195, 
+	360, 360, 360, 365, 360, 415, 415, 91, 
+	79, 194, 195, 360, 360, 360, 365, 360, 
+	417, 101, 418, 419, 94, 79, 194, 195, 
+	360, 360, 360, 365, 360, 101, 418, 419, 
+	94, 79, 194, 195, 360, 360, 360, 365, 
+	360, 418, 418, 94, 79, 194, 195, 360, 
+	360, 360, 365, 360, 420, 98, 401, 421, 
+	360, 79, 194, 195, 360, 360, 360, 365, 
+	360, 98, 401, 421, 360, 79, 194, 195, 
+	360, 360, 360, 365, 360, 401, 422, 360, 
+	79, 194, 195, 360, 360, 360, 365, 360, 
+	98, 360, 401, 401, 360, 79, 194, 195, 
+	360, 360, 360, 365, 360, 80, 81, 360, 
+	360, 98, 400, 360, 79, 194, 195, 360, 
+	360, 360, 365, 360, 80, 360, 394, 399, 
+	399, 84, 79, 194, 195, 360, 360, 360, 
+	397, 360, 393, 394, 399, 399, 84, 79, 
+	194, 195, 360, 360, 360, 397, 360, 360, 
+	200, 360, 393, 394, 395, 399, 84, 79, 
+	194, 195, 360, 360, 109, 397, 360, 360, 
+	200, 360, 391, 360, 423, 360, 410, 410, 
+	84, 79, 194, 195, 360, 360, 360, 365, 
+	360, 391, 360, 391, 360, 360, 360, 401, 
+	401, 360, 79, 194, 195, 360, 360, 360, 
+	365, 360, 391, 360, 391, 360, 360, 360, 
+	401, 424, 360, 79, 194, 195, 360, 360, 
+	360, 365, 360, 391, 360, 391, 360, 423, 
+	360, 401, 401, 360, 79, 194, 195, 360, 
+	360, 360, 365, 360, 391, 360, 391, 81, 
+	360, 360, 98, 392, 360, 79, 194, 195, 
+	360, 360, 360, 365, 360, 391, 360, 384, 
+	385, 390, 390, 84, 79, 194, 195, 360, 
+	360, 360, 388, 360, 360, 200, 360, 384, 
+	385, 386, 390, 84, 79, 194, 195, 360, 
+	360, 111, 388, 360, 360, 200, 360, 382, 
+	360, 425, 360, 410, 410, 84, 79, 194, 
+	195, 360, 360, 360, 365, 360, 382, 360, 
+	382, 360, 360, 360, 401, 401, 360, 79, 
+	194, 195, 360, 360, 360, 365, 360, 382, 
+	360, 382, 360, 360, 360, 401, 426, 360, 
+	79, 194, 195, 360, 360, 360, 365, 360, 
+	382, 360, 382, 360, 425, 360, 401, 401, 
+	360, 79, 194, 195, 360, 360, 360, 365, 
+	360, 382, 360, 382, 81, 360, 360, 98, 
+	383, 360, 79, 194, 195, 360, 360, 360, 
+	365, 360, 382, 360, 375, 376, 381, 381, 
+	84, 79, 194, 195, 360, 360, 360, 379, 
+	360, 360, 200, 360, 375, 376, 377, 381, 
+	84, 79, 194, 195, 360, 360, 113, 379, 
+	360, 360, 200, 360, 373, 360, 427, 360, 
+	410, 410, 84, 79, 194, 195, 360, 360, 
+	360, 365, 360, 373, 360, 373, 360, 360, 
+	360, 401, 401, 360, 79, 194, 195, 360, 
+	360, 360, 365, 360, 373, 360, 373, 360, 
+	360, 360, 401, 428, 360, 79, 194, 195, 
+	360, 360, 360, 365, 360, 373, 360, 373, 
+	360, 427, 360, 401, 401, 360, 79, 194, 
+	195, 360, 360, 360, 365, 360, 373, 360, 
+	373, 81, 360, 360, 98, 374, 360, 79, 
+	194, 195, 360, 360, 360, 365, 360, 373, 
+	360, 366, 367, 372, 372, 84, 79, 194, 
+	195, 360, 360, 360, 370, 360, 360, 200, 
+	360, 366, 367, 368, 372, 84, 79, 194, 
+	195, 360, 360, 115, 370, 360, 360, 200, 
+	360, 363, 360, 429, 360, 410, 410, 84, 
+	79, 194, 195, 360, 360, 360, 365, 360, 
+	363, 360, 363, 360, 360, 360, 401, 401, 
+	360, 79, 194, 195, 360, 360, 360, 365, 
+	360, 363, 360, 363, 360, 360, 360, 401, 
+	430, 360, 79, 194, 195, 360, 360, 360, 
+	365, 360, 363, 360, 363, 360, 429, 360, 
+	401, 401, 360, 79, 194, 195, 360, 360, 
+	360, 365, 360, 363, 360, 363, 81, 360, 
+	360, 98, 364, 360, 79, 194, 195, 360, 
+	360, 360, 365, 360, 363, 360, 116, 83, 
+	83, 84, 79, 431, 431, 431, 431, 156, 
+	116, 431, 190, 191, 362, 362, 84, 79, 
+	194, 195, 360, 360, 360, 197, 360, 360, 
+	200, 360, 116, 83, 83, 84, 79, 431, 
+	431, 431, 431, 431, 116, 431, 433, 434, 
+	435, 436, 123, 118, 437, 438, 432, 432, 
+	155, 439, 432, 432, 440, 432, 441, 434, 
+	436, 436, 123, 118, 437, 438, 432, 432, 
+	432, 439, 432, 432, 440, 432, 434, 436, 
+	436, 123, 118, 437, 438, 432, 432, 432, 
+	439, 432, 432, 440, 432, 442, 432, 432, 
+	432, 136, 443, 432, 118, 437, 438, 432, 
+	432, 432, 444, 432, 442, 432, 445, 446, 
+	447, 448, 123, 118, 437, 438, 432, 432, 
+	153, 449, 432, 432, 440, 432, 450, 446, 
+	451, 451, 123, 118, 437, 438, 432, 432, 
+	432, 449, 432, 432, 440, 432, 446, 451, 
+	451, 123, 118, 437, 438, 432, 432, 432, 
+	449, 432, 432, 440, 432, 452, 432, 432, 
+	432, 136, 453, 432, 118, 437, 438, 432, 
+	432, 432, 444, 432, 452, 432, 454, 455, 
+	456, 457, 123, 118, 437, 438, 432, 432, 
+	151, 458, 432, 432, 440, 432, 459, 455, 
+	460, 460, 123, 118, 437, 438, 432, 432, 
+	432, 458, 432, 432, 440, 432, 455, 460, 
+	460, 123, 118, 437, 438, 432, 432, 432, 
+	458, 432, 432, 440, 432, 461, 432, 432, 
+	432, 136, 462, 432, 118, 437, 438, 432, 
+	432, 432, 444, 432, 461, 432, 463, 464, 
+	465, 466, 123, 118, 437, 438, 432, 432, 
+	149, 467, 432, 432, 440, 432, 468, 464, 
+	469, 469, 123, 118, 437, 438, 432, 432, 
+	432, 467, 432, 432, 440, 432, 464, 469, 
+	469, 123, 118, 437, 438, 432, 432, 432, 
+	467, 432, 432, 440, 432, 470, 432, 432, 
+	432, 136, 471, 432, 118, 437, 438, 432, 
+	432, 432, 444, 432, 470, 432, 472, 473, 
+	474, 475, 123, 118, 437, 438, 432, 432, 
+	147, 476, 432, 432, 440, 432, 477, 473, 
+	478, 478, 123, 118, 437, 438, 432, 432, 
+	432, 476, 432, 432, 440, 432, 473, 478, 
+	478, 123, 118, 437, 438, 432, 432, 432, 
+	476, 432, 432, 440, 432, 136, 479, 432, 
+	118, 437, 438, 432, 432, 432, 444, 432, 
+	480, 480, 432, 118, 437, 438, 432, 432, 
+	432, 444, 432, 481, 432, 432, 482, 437, 
+	438, 432, 437, 438, 432, 483, 432, 437, 
+	484, 432, 437, 485, 432, 437, 432, 481, 
+	432, 432, 432, 437, 438, 432, 486, 432, 
+	487, 488, 432, 118, 437, 438, 432, 432, 
+	121, 432, 120, 432, 480, 480, 432, 118, 
+	437, 438, 432, 480, 480, 432, 118, 437, 
+	438, 432, 486, 432, 480, 480, 432, 118, 
+	437, 438, 432, 486, 432, 487, 480, 432, 
+	118, 437, 438, 432, 432, 121, 432, 136, 
+	432, 489, 489, 123, 118, 437, 438, 432, 
+	432, 432, 444, 432, 490, 145, 491, 492, 
+	126, 118, 437, 438, 432, 432, 432, 444, 
+	432, 145, 491, 492, 126, 118, 437, 438, 
+	432, 432, 432, 444, 432, 491, 491, 126, 
+	118, 437, 438, 432, 432, 432, 444, 432, 
+	493, 142, 494, 495, 129, 118, 437, 438, 
+	432, 432, 432, 444, 432, 142, 494, 495, 
+	129, 118, 437, 438, 432, 432, 432, 444, 
+	432, 494, 494, 129, 118, 437, 438, 432, 
+	432, 432, 444, 432, 496, 139, 497, 498, 
+	132, 118, 437, 438, 432, 432, 432, 444, 
+	432, 139, 497, 498, 132, 118, 437, 438, 
+	432, 432, 432, 444, 432, 497, 497, 132, 
+	118, 437, 438, 432, 432, 432, 444, 432, 
+	499, 136, 480, 500, 432, 118, 437, 438, 
+	432, 432, 432, 444, 432, 136, 480, 500, 
+	432, 118, 437, 438, 432, 432, 432, 444, 
+	432, 480, 501, 432, 118, 437, 438, 432, 
+	432, 432, 444, 432, 136, 432, 480, 480, 
+	432, 118, 437, 438, 432, 432, 432, 444, 
+	432, 119, 120, 432, 432, 136, 479, 432, 
+	118, 437, 438, 432, 432, 432, 444, 432, 
+	119, 432, 473, 478, 478, 123, 118, 437, 
+	438, 432, 432, 432, 476, 432, 472, 473, 
+	478, 478, 123, 118, 437, 438, 432, 432, 
+	432, 476, 432, 432, 440, 432, 472, 473, 
+	474, 478, 123, 118, 437, 438, 432, 432, 
+	147, 476, 432, 432, 440, 432, 470, 432, 
+	502, 432, 489, 489, 123, 118, 437, 438, 
+	432, 432, 432, 444, 432, 470, 432, 470, 
+	432, 432, 432, 480, 480, 432, 118, 437, 
+	438, 432, 432, 432, 444, 432, 470, 432, 
+	470, 432, 432, 432, 480, 503, 432, 118, 
+	437, 438, 432, 432, 432, 444, 432, 470, 
+	432, 470, 432, 502, 432, 480, 480, 432, 
+	118, 437, 438, 432, 432, 432, 444, 432, 
+	470, 432, 470, 120, 432, 432, 136, 471, 
+	432, 118, 437, 438, 432, 432, 432, 444, 
+	432, 470, 432, 463, 464, 469, 469, 123, 
+	118, 437, 438, 432, 432, 432, 467, 432, 
+	432, 440, 432, 463, 464, 465, 469, 123, 
+	118, 437, 438, 432, 432, 149, 467, 432, 
+	432, 440, 432, 461, 432, 504, 432, 489, 
+	489, 123, 118, 437, 438, 432, 432, 432, 
+	444, 432, 461, 432, 461, 432, 432, 432, 
+	480, 480, 432, 118, 437, 438, 432, 432, 
+	432, 444, 432, 461, 432, 461, 432, 432, 
+	432, 480, 505, 432, 118, 437, 438, 432, 
+	432, 432, 444, 432, 461, 432, 461, 432, 
+	504, 432, 480, 480, 432, 118, 437, 438, 
+	432, 432, 432, 444, 432, 461, 432, 461, 
+	120, 432, 432, 136, 462, 432, 118, 437, 
+	438, 432, 432, 432, 444, 432, 461, 432, 
+	454, 455, 460, 460, 123, 118, 437, 438, 
+	432, 432, 432, 458, 432, 432, 440, 432, 
+	454, 455, 456, 460, 123, 118, 437, 438, 
+	432, 432, 151, 458, 432, 432, 440, 432, 
+	452, 432, 506, 432, 489, 489, 123, 118, 
+	437, 438, 432, 432, 432, 444, 432, 452, 
+	432, 452, 432, 432, 432, 480, 480, 432, 
+	118, 437, 438, 432, 432, 432, 444, 432, 
+	452, 432, 452, 432, 432, 432, 480, 507, 
+	432, 118, 437, 438, 432, 432, 432, 444, 
+	432, 452, 432, 452, 432, 506, 432, 480, 
+	480, 432, 118, 437, 438, 432, 432, 432, 
+	444, 432, 452, 432, 452, 120, 432, 432, 
+	136, 453, 432, 118, 437, 438, 432, 432, 
+	432, 444, 432, 452, 432, 445, 446, 451, 
+	451, 123, 118, 437, 438, 432, 432, 432, 
+	449, 432, 432, 440, 432, 445, 446, 447, 
+	451, 123, 118, 437, 438, 432, 432, 153, 
+	449, 432, 432, 440, 432, 442, 432, 508, 
+	432, 489, 489, 123, 118, 437, 438, 432, 
+	432, 432, 444, 432, 442, 432, 442, 432, 
+	432, 432, 480, 480, 432, 118, 437, 438, 
+	432, 432, 432, 444, 432, 442, 432, 442, 
+	432, 432, 432, 480, 509, 432, 118, 437, 
+	438, 432, 432, 432, 444, 432, 442, 432, 
+	442, 432, 508, 432, 480, 480, 432, 118, 
+	437, 438, 432, 432, 432, 444, 432, 442, 
+	432, 442, 120, 432, 432, 136, 443, 432, 
+	118, 437, 438, 432, 432, 432, 444, 432, 
+	442, 432, 433, 434, 436, 436, 123, 118, 
+	437, 438, 432, 432, 432, 439, 432, 432, 
+	440, 432, 188, 189, 190, 191, 510, 362, 
+	84, 79, 194, 195, 196, 196, 156, 197, 
+	360, 188, 200, 360, 203, 511, 205, 206, 
+	6, 1, 207, 208, 202, 202, 38, 209, 
+	202, 202, 210, 202, 213, 189, 190, 191, 
+	512, 513, 84, 157, 514, 515, 202, 196, 
+	156, 516, 202, 213, 200, 202, 116, 517, 
+	517, 84, 157, 207, 208, 202, 202, 156, 
+	518, 202, 519, 202, 202, 520, 514, 515, 
+	202, 514, 515, 202, 254, 202, 514, 521, 
+	202, 514, 522, 202, 514, 202, 519, 202, 
+	202, 202, 514, 515, 202, 523, 3, 360, 
+	360, 401, 430, 360, 79, 194, 195, 360, 
+	360, 360, 365, 360, 523, 360, 524, 367, 
+	525, 526, 84, 157, 514, 515, 202, 202, 
+	158, 370, 202, 202, 200, 202, 527, 367, 
+	528, 528, 84, 157, 514, 515, 202, 202, 
+	202, 370, 202, 202, 200, 202, 367, 528, 
+	528, 84, 157, 514, 515, 202, 202, 202, 
+	370, 202, 202, 200, 202, 524, 367, 528, 
+	528, 84, 157, 514, 515, 202, 202, 202, 
+	370, 202, 202, 200, 202, 524, 367, 525, 
+	528, 84, 157, 514, 515, 202, 202, 158, 
+	370, 202, 202, 200, 202, 213, 202, 279, 
+	116, 529, 529, 160, 157, 207, 208, 202, 
+	202, 202, 518, 202, 213, 202, 530, 184, 
+	531, 532, 162, 157, 514, 515, 202, 202, 
+	202, 533, 202, 184, 531, 532, 162, 157, 
+	514, 515, 202, 202, 202, 533, 202, 531, 
+	531, 162, 157, 514, 515, 202, 202, 202, 
+	533, 202, 534, 181, 535, 536, 165, 157, 
+	514, 515, 202, 202, 202, 533, 202, 181, 
+	535, 536, 165, 157, 514, 515, 202, 202, 
+	202, 533, 202, 535, 535, 165, 157, 514, 
+	515, 202, 202, 202, 533, 202, 537, 178, 
+	538, 539, 168, 157, 514, 515, 202, 202, 
+	202, 533, 202, 178, 538, 539, 168, 157, 
+	514, 515, 202, 202, 202, 533, 202, 538, 
+	538, 168, 157, 514, 515, 202, 202, 202, 
+	533, 202, 540, 175, 541, 542, 202, 157, 
+	514, 515, 202, 202, 202, 533, 202, 175, 
+	541, 542, 202, 157, 514, 515, 202, 202, 
+	202, 533, 202, 541, 541, 202, 157, 514, 
+	515, 202, 202, 202, 533, 202, 543, 202, 
+	544, 545, 202, 157, 514, 515, 202, 202, 
+	172, 202, 171, 202, 541, 541, 202, 157, 
+	514, 515, 202, 541, 541, 202, 157, 514, 
+	515, 202, 543, 202, 541, 541, 202, 157, 
+	514, 515, 202, 543, 202, 544, 541, 202, 
+	157, 514, 515, 202, 202, 172, 202, 523, 
+	171, 360, 360, 98, 364, 360, 79, 194, 
+	195, 360, 360, 360, 365, 360, 523, 360, 
+	547, 546, 548, 548, 546, 186, 549, 550, 
+	546, 548, 548, 546, 186, 549, 550, 546, 
+	551, 546, 546, 552, 549, 550, 546, 549, 
+	550, 546, 553, 546, 549, 554, 546, 549, 
+	555, 546, 549, 546, 551, 546, 546, 546, 
+	549, 550, 546, 0
 };
 
 static const short _indic_syllable_machine_trans_targs[] = {
@@ -1190,73 +992,73 @@
 	178, 200, 207, 209, 210, 4, 213, 5, 
 	7, 216, 8, 10, 219, 11, 13, 222, 
 	14, 16, 17, 199, 19, 20, 221, 22, 
-	23, 218, 25, 26, 215, 224, 229, 233, 
-	236, 240, 243, 247, 250, 254, 257, 178, 
-	280, 287, 289, 290, 41, 293, 42, 44, 
-	296, 45, 47, 299, 48, 50, 302, 51, 
-	53, 54, 279, 56, 57, 301, 59, 60, 
-	298, 62, 63, 295, 304, 309, 313, 316, 
-	320, 323, 327, 330, 334, 338, 178, 359, 
-	366, 368, 369, 78, 372, 178, 79, 81, 
-	375, 82, 84, 378, 85, 87, 381, 88, 
-	90, 91, 358, 93, 94, 380, 96, 97, 
-	377, 99, 100, 374, 383, 388, 392, 395, 
-	399, 402, 406, 409, 413, 178, 440, 447, 
-	449, 450, 114, 453, 115, 117, 456, 118, 
-	120, 459, 121, 123, 462, 124, 126, 127, 
-	439, 129, 130, 461, 132, 133, 458, 135, 
-	136, 455, 464, 469, 473, 476, 480, 483, 
-	487, 490, 494, 497, 417, 502, 513, 152, 
-	516, 154, 519, 155, 157, 522, 158, 160, 
-	525, 161, 528, 530, 531, 166, 167, 527, 
-	169, 170, 524, 172, 173, 521, 175, 176, 
-	518, 178, 536, 178, 179, 259, 339, 341, 
-	416, 418, 361, 362, 419, 415, 498, 499, 
-	386, 534, 387, 178, 180, 182, 36, 258, 
-	202, 203, 256, 227, 228, 181, 35, 183, 
-	252, 1, 184, 186, 34, 251, 249, 185, 
-	33, 187, 245, 188, 190, 32, 244, 242, 
-	189, 31, 191, 238, 192, 194, 30, 237, 
-	235, 193, 29, 195, 231, 196, 198, 28, 
-	230, 226, 197, 27, 212, 0, 201, 206, 
-	178, 204, 205, 208, 2, 211, 3, 214, 
-	6, 24, 217, 9, 21, 220, 12, 18, 
-	223, 15, 225, 232, 234, 239, 241, 246, 
-	248, 253, 255, 178, 260, 262, 73, 336, 
-	282, 283, 337, 307, 308, 261, 72, 263, 
-	332, 38, 264, 266, 71, 331, 329, 265, 
-	70, 267, 325, 268, 270, 69, 324, 322, 
-	269, 68, 271, 318, 272, 274, 67, 317, 
-	315, 273, 66, 275, 311, 276, 278, 65, 
-	310, 306, 277, 64, 292, 37, 281, 286, 
-	178, 284, 285, 288, 39, 291, 40, 294, 
-	43, 61, 297, 46, 58, 300, 49, 55, 
-	303, 52, 305, 312, 314, 319, 321, 326, 
-	328, 333, 335, 178, 340, 109, 342, 411, 
-	75, 343, 345, 108, 410, 408, 344, 107, 
-	346, 404, 347, 349, 106, 403, 401, 348, 
-	105, 350, 397, 351, 353, 104, 396, 394, 
-	352, 103, 354, 390, 355, 357, 102, 389, 
-	385, 356, 101, 371, 74, 360, 365, 178, 
-	363, 364, 367, 76, 370, 77, 373, 80, 
-	98, 376, 83, 95, 379, 86, 92, 382, 
-	89, 384, 391, 393, 398, 400, 405, 407, 
-	412, 414, 178, 178, 420, 422, 146, 145, 
-	442, 443, 496, 467, 468, 421, 423, 492, 
-	111, 424, 426, 144, 491, 489, 425, 143, 
-	427, 485, 428, 430, 142, 484, 482, 429, 
-	141, 431, 478, 432, 434, 140, 477, 475, 
-	433, 139, 435, 471, 436, 438, 138, 470, 
-	466, 437, 137, 452, 110, 441, 446, 178, 
-	444, 445, 448, 112, 451, 113, 454, 116, 
-	134, 457, 119, 131, 460, 122, 128, 463, 
-	125, 465, 472, 474, 479, 481, 486, 488, 
-	493, 495, 147, 500, 501, 515, 504, 505, 
-	533, 148, 509, 503, 508, 506, 507, 510, 
-	511, 150, 514, 512, 149, 151, 517, 153, 
-	174, 163, 520, 156, 171, 523, 159, 168, 
-	526, 162, 165, 529, 164, 532, 178, 535, 
-	177, 538, 539, 537, 542, 178, 540, 541
+	23, 218, 25, 26, 215, 224, 228, 232, 
+	235, 239, 242, 246, 249, 253, 256, 178, 
+	279, 286, 288, 289, 41, 292, 42, 44, 
+	295, 45, 47, 298, 48, 50, 301, 51, 
+	53, 54, 278, 56, 57, 300, 59, 60, 
+	297, 62, 63, 294, 303, 307, 311, 314, 
+	318, 321, 325, 328, 332, 336, 178, 357, 
+	364, 366, 367, 78, 370, 178, 79, 81, 
+	373, 82, 84, 376, 85, 87, 379, 88, 
+	90, 91, 356, 93, 94, 378, 96, 97, 
+	375, 99, 100, 372, 381, 385, 389, 392, 
+	396, 399, 403, 406, 410, 178, 437, 444, 
+	446, 447, 114, 450, 115, 117, 453, 118, 
+	120, 456, 121, 123, 459, 124, 126, 127, 
+	436, 129, 130, 458, 132, 133, 455, 135, 
+	136, 452, 461, 465, 469, 472, 476, 479, 
+	483, 486, 490, 493, 414, 498, 509, 152, 
+	512, 154, 515, 155, 157, 518, 158, 160, 
+	521, 161, 524, 526, 527, 166, 167, 523, 
+	169, 170, 520, 172, 173, 517, 175, 176, 
+	514, 178, 532, 178, 179, 258, 337, 339, 
+	413, 415, 359, 360, 416, 412, 494, 495, 
+	384, 530, 178, 180, 182, 36, 257, 202, 
+	203, 255, 227, 181, 35, 183, 251, 1, 
+	184, 186, 34, 250, 248, 185, 33, 187, 
+	244, 188, 190, 32, 243, 241, 189, 31, 
+	191, 237, 192, 194, 30, 236, 234, 193, 
+	29, 195, 230, 196, 198, 28, 229, 226, 
+	197, 27, 212, 0, 201, 206, 178, 204, 
+	205, 208, 2, 211, 3, 214, 6, 24, 
+	217, 9, 21, 220, 12, 18, 223, 15, 
+	225, 231, 233, 238, 240, 245, 247, 252, 
+	254, 178, 259, 261, 73, 334, 281, 282, 
+	335, 306, 260, 72, 262, 330, 38, 263, 
+	265, 71, 329, 327, 264, 70, 266, 323, 
+	267, 269, 69, 322, 320, 268, 68, 270, 
+	316, 271, 273, 67, 315, 313, 272, 66, 
+	274, 309, 275, 277, 65, 308, 305, 276, 
+	64, 291, 37, 280, 285, 178, 283, 284, 
+	287, 39, 290, 40, 293, 43, 61, 296, 
+	46, 58, 299, 49, 55, 302, 52, 304, 
+	310, 312, 317, 319, 324, 326, 331, 333, 
+	178, 338, 109, 340, 408, 75, 341, 343, 
+	108, 407, 405, 342, 107, 344, 401, 345, 
+	347, 106, 400, 398, 346, 105, 348, 394, 
+	349, 351, 104, 393, 391, 350, 103, 352, 
+	387, 353, 355, 102, 386, 383, 354, 101, 
+	369, 74, 358, 363, 178, 361, 362, 365, 
+	76, 368, 77, 371, 80, 98, 374, 83, 
+	95, 377, 86, 92, 380, 89, 382, 388, 
+	390, 395, 397, 402, 404, 409, 411, 178, 
+	178, 417, 419, 146, 145, 439, 440, 492, 
+	464, 418, 420, 488, 111, 421, 423, 144, 
+	487, 485, 422, 143, 424, 481, 425, 427, 
+	142, 480, 478, 426, 141, 428, 474, 429, 
+	431, 140, 473, 471, 430, 139, 432, 467, 
+	433, 435, 138, 466, 463, 434, 137, 449, 
+	110, 438, 443, 178, 441, 442, 445, 112, 
+	448, 113, 451, 116, 134, 454, 119, 131, 
+	457, 122, 128, 460, 125, 462, 468, 470, 
+	475, 477, 482, 484, 489, 491, 147, 496, 
+	497, 511, 500, 501, 529, 148, 505, 499, 
+	504, 502, 503, 506, 507, 150, 510, 508, 
+	149, 151, 513, 153, 174, 163, 516, 156, 
+	171, 519, 159, 168, 522, 162, 165, 525, 
+	164, 528, 178, 531, 177, 534, 535, 533, 
+	538, 178, 536, 537
 };
 
 static const char _indic_syllable_machine_trans_actions[] = {
@@ -1285,51 +1087,51 @@
 	0, 0, 2, 0, 0, 2, 0, 0, 
 	2, 9, 0, 12, 2, 2, 6, 2, 
 	13, 13, 0, 0, 2, 2, 6, 2, 
-	6, 2, 6, 14, 2, 2, 0, 2, 
-	0, 0, 2, 2, 2, 2, 0, 2, 
-	2, 0, 2, 2, 0, 2, 2, 2, 
+	6, 2, 14, 2, 2, 0, 2, 0, 
+	0, 2, 2, 2, 0, 2, 2, 0, 
+	2, 2, 0, 2, 2, 2, 0, 2, 
+	2, 2, 2, 0, 2, 2, 2, 0, 
+	2, 2, 2, 2, 0, 2, 2, 2, 
 	0, 2, 2, 2, 2, 0, 2, 2, 
-	2, 0, 2, 2, 2, 2, 0, 2, 
-	2, 2, 0, 2, 2, 2, 2, 0, 
-	2, 2, 2, 0, 2, 0, 0, 0, 
-	15, 0, 0, 2, 0, 2, 0, 2, 
-	0, 0, 2, 0, 0, 2, 0, 0, 
-	2, 0, 2, 2, 2, 2, 2, 2, 
-	2, 2, 2, 16, 2, 2, 0, 2, 
-	0, 0, 2, 2, 2, 2, 0, 2, 
-	2, 0, 2, 2, 0, 2, 2, 2, 
-	0, 2, 2, 2, 2, 0, 2, 2, 
-	2, 0, 2, 2, 2, 2, 0, 2, 
-	2, 2, 0, 2, 2, 2, 2, 0, 
-	2, 2, 2, 0, 2, 0, 0, 0, 
-	17, 0, 0, 2, 0, 2, 0, 2, 
-	0, 0, 2, 0, 0, 2, 0, 0, 
-	2, 0, 2, 2, 2, 2, 2, 2, 
-	2, 2, 2, 18, 6, 0, 6, 6, 
-	0, 6, 2, 0, 6, 2, 6, 0, 
-	6, 6, 6, 2, 0, 6, 2, 6, 
-	0, 6, 6, 6, 2, 0, 6, 2, 
-	6, 0, 6, 6, 6, 2, 0, 6, 
-	2, 6, 0, 6, 0, 0, 0, 19, 
-	0, 0, 2, 0, 2, 0, 2, 0, 
-	0, 2, 0, 0, 2, 0, 0, 2, 
-	0, 2, 2, 2, 2, 2, 2, 2, 
-	2, 2, 20, 21, 2, 2, 0, 0, 
-	0, 0, 2, 2, 2, 2, 2, 2, 
-	0, 2, 2, 0, 2, 2, 2, 0, 
+	2, 0, 2, 0, 0, 0, 15, 0, 
+	0, 2, 0, 2, 0, 2, 0, 0, 
+	2, 0, 0, 2, 0, 0, 2, 0, 
+	2, 2, 2, 2, 2, 2, 2, 2, 
+	2, 16, 2, 2, 0, 2, 0, 0, 
+	2, 2, 2, 0, 2, 2, 0, 2, 
+	2, 0, 2, 2, 2, 0, 2, 2, 
+	2, 2, 0, 2, 2, 2, 0, 2, 
+	2, 2, 2, 0, 2, 2, 2, 0, 
 	2, 2, 2, 2, 0, 2, 2, 2, 
-	0, 2, 2, 2, 2, 0, 2, 2, 
-	2, 0, 2, 2, 2, 2, 0, 2, 
-	2, 2, 0, 2, 0, 0, 0, 22, 
-	0, 0, 2, 0, 2, 0, 2, 0, 
+	0, 2, 0, 0, 0, 17, 0, 0, 
+	2, 0, 2, 0, 2, 0, 0, 2, 
+	0, 0, 2, 0, 0, 2, 0, 2, 
+	2, 2, 2, 2, 2, 2, 2, 2, 
+	18, 6, 0, 6, 6, 0, 6, 2, 
+	0, 6, 2, 6, 0, 6, 6, 6, 
+	2, 0, 6, 2, 6, 0, 6, 6, 
+	6, 2, 0, 6, 2, 6, 0, 6, 
+	6, 6, 2, 0, 6, 2, 6, 0, 
+	6, 0, 0, 0, 19, 0, 0, 2, 
+	0, 2, 0, 2, 0, 0, 2, 0, 
+	0, 2, 0, 0, 2, 0, 2, 2, 
+	2, 2, 2, 2, 2, 2, 2, 20, 
+	21, 2, 2, 0, 0, 0, 0, 2, 
+	2, 2, 2, 2, 0, 2, 2, 0, 
+	2, 2, 2, 0, 2, 2, 2, 2, 
+	0, 2, 2, 2, 0, 2, 2, 2, 
+	2, 0, 2, 2, 2, 0, 2, 2, 
+	2, 2, 0, 2, 2, 2, 0, 2, 
+	0, 0, 0, 22, 0, 0, 2, 0, 
+	2, 0, 2, 0, 0, 2, 0, 0, 
+	2, 0, 0, 2, 0, 2, 2, 2, 
+	2, 2, 2, 2, 2, 2, 0, 0, 
+	8, 2, 0, 0, 2, 0, 2, 0, 
+	0, 0, 0, 8, 8, 0, 8, 8, 
+	0, 0, 2, 0, 0, 0, 2, 0, 
 	0, 2, 0, 0, 2, 0, 0, 2, 
-	0, 2, 2, 2, 2, 2, 2, 2, 
-	2, 2, 0, 0, 8, 2, 0, 0, 
-	2, 0, 2, 0, 0, 0, 0, 8, 
-	8, 0, 8, 8, 0, 0, 2, 0, 
-	0, 0, 2, 0, 0, 2, 0, 0, 
-	2, 0, 0, 2, 0, 2, 23, 2, 
-	0, 0, 0, 0, 0, 24, 0, 0
+	0, 2, 23, 2, 0, 0, 0, 0, 
+	0, 24, 0, 0
 };
 
 static const char _indic_syllable_machine_to_state_actions[] = {
@@ -1400,7 +1202,7 @@
 	0, 0, 0, 0, 0, 0, 0, 0, 
 	0, 0, 0, 0, 0, 0, 0, 0, 
 	0, 0, 0, 0, 0, 0, 0, 0, 
-	0, 0, 0, 0, 0, 0, 0
+	0, 0, 0
 };
 
 static const char _indic_syllable_machine_from_state_actions[] = {
@@ -1471,7 +1273,7 @@
 	0, 0, 0, 0, 0, 0, 0, 0, 
 	0, 0, 0, 0, 0, 0, 0, 0, 
 	0, 0, 0, 0, 0, 0, 0, 0, 
-	0, 0, 0, 0, 0, 0, 0
+	0, 0, 0
 };
 
 static const short _indic_syllable_machine_eof_trans[] = {
@@ -1497,52 +1299,52 @@
 	1, 1, 1, 1, 1, 1, 1, 1, 
 	1, 1, 1, 1, 1, 1, 1, 1, 
 	1, 1, 1, 1, 1, 1, 1, 1, 
-	1, 186, 0, 204, 204, 204, 204, 204, 
-	204, 204, 204, 204, 204, 204, 204, 204, 
-	204, 204, 204, 204, 204, 204, 204, 204, 
-	204, 204, 204, 204, 204, 204, 204, 204, 
-	204, 204, 204, 204, 204, 204, 204, 204, 
-	204, 204, 204, 204, 204, 204, 204, 204, 
-	204, 204, 204, 204, 204, 204, 204, 204, 
-	204, 204, 204, 204, 204, 204, 204, 204, 
-	204, 204, 204, 204, 204, 204, 204, 204, 
-	204, 204, 204, 204, 204, 204, 204, 204, 
-	204, 204, 204, 284, 284, 284, 284, 284, 
-	284, 284, 284, 284, 284, 284, 284, 284, 
-	284, 284, 284, 284, 284, 284, 284, 284, 
-	284, 284, 284, 284, 284, 284, 284, 284, 
-	284, 284, 284, 284, 284, 284, 284, 284, 
-	284, 284, 284, 284, 284, 284, 284, 284, 
-	284, 284, 284, 284, 284, 284, 284, 284, 
-	284, 284, 284, 284, 284, 284, 284, 284, 
-	284, 284, 284, 284, 284, 284, 284, 284, 
-	284, 284, 284, 284, 284, 284, 284, 284, 
-	284, 284, 284, 364, 364, 364, 364, 364, 
-	364, 364, 364, 364, 364, 364, 364, 364, 
-	364, 364, 364, 364, 364, 364, 364, 364, 
-	364, 364, 364, 364, 364, 364, 364, 364, 
-	364, 364, 364, 364, 364, 364, 364, 364, 
-	364, 364, 364, 364, 364, 364, 364, 364, 
-	364, 364, 364, 364, 364, 364, 364, 364, 
-	364, 364, 364, 364, 364, 364, 364, 364, 
-	364, 364, 364, 364, 364, 364, 364, 364, 
-	364, 364, 364, 364, 364, 364, 364, 364, 
-	435, 364, 435, 436, 436, 436, 436, 436, 
-	436, 436, 436, 436, 436, 436, 436, 436, 
-	436, 436, 436, 436, 436, 436, 436, 436, 
-	436, 436, 436, 436, 436, 436, 436, 436, 
-	436, 436, 436, 436, 436, 436, 436, 436, 
-	436, 436, 436, 436, 436, 436, 436, 436, 
-	436, 436, 436, 436, 436, 436, 436, 436, 
-	436, 436, 436, 436, 436, 436, 436, 436, 
-	436, 436, 436, 436, 436, 436, 436, 436, 
-	436, 436, 436, 436, 436, 436, 436, 436, 
-	436, 436, 364, 204, 204, 204, 204, 204, 
-	204, 204, 204, 204, 204, 364, 204, 204, 
-	204, 204, 204, 204, 204, 204, 204, 204, 
-	204, 204, 204, 204, 204, 204, 204, 204, 
-	204, 204, 204, 204, 204, 364, 551, 551, 
-	551, 551, 551, 551, 551, 551, 551
+	1, 186, 0, 203, 203, 203, 203, 203, 
+	203, 203, 203, 203, 203, 203, 203, 203, 
+	203, 203, 203, 203, 203, 203, 203, 203, 
+	203, 203, 203, 203, 203, 203, 203, 203, 
+	203, 203, 203, 203, 203, 203, 203, 203, 
+	203, 203, 203, 203, 203, 203, 203, 203, 
+	203, 203, 203, 203, 203, 203, 203, 203, 
+	203, 203, 203, 203, 203, 203, 203, 203, 
+	203, 203, 203, 203, 203, 203, 203, 203, 
+	203, 203, 203, 203, 203, 203, 203, 203, 
+	203, 203, 282, 282, 282, 282, 282, 282, 
+	282, 282, 282, 282, 282, 282, 282, 282, 
+	282, 282, 282, 282, 282, 282, 282, 282, 
+	282, 282, 282, 282, 282, 282, 282, 282, 
+	282, 282, 282, 282, 282, 282, 282, 282, 
+	282, 282, 282, 282, 282, 282, 282, 282, 
+	282, 282, 282, 282, 282, 282, 282, 282, 
+	282, 282, 282, 282, 282, 282, 282, 282, 
+	282, 282, 282, 282, 282, 282, 282, 282, 
+	282, 282, 282, 282, 282, 282, 282, 282, 
+	282, 361, 361, 361, 361, 361, 361, 361, 
+	361, 361, 361, 361, 361, 361, 361, 361, 
+	361, 361, 361, 361, 361, 361, 361, 361, 
+	361, 361, 361, 361, 361, 361, 361, 361, 
+	361, 361, 361, 361, 361, 361, 361, 361, 
+	361, 361, 361, 361, 361, 361, 361, 361, 
+	361, 361, 361, 361, 361, 361, 361, 361, 
+	361, 361, 361, 361, 361, 361, 361, 361, 
+	361, 361, 361, 361, 361, 361, 361, 361, 
+	361, 361, 361, 361, 361, 432, 361, 432, 
+	433, 433, 433, 433, 433, 433, 433, 433, 
+	433, 433, 433, 433, 433, 433, 433, 433, 
+	433, 433, 433, 433, 433, 433, 433, 433, 
+	433, 433, 433, 433, 433, 433, 433, 433, 
+	433, 433, 433, 433, 433, 433, 433, 433, 
+	433, 433, 433, 433, 433, 433, 433, 433, 
+	433, 433, 433, 433, 433, 433, 433, 433, 
+	433, 433, 433, 433, 433, 433, 433, 433, 
+	433, 433, 433, 433, 433, 433, 433, 433, 
+	433, 433, 433, 433, 433, 433, 361, 203, 
+	203, 203, 203, 203, 203, 203, 203, 203, 
+	203, 361, 203, 203, 203, 203, 203, 203, 
+	203, 203, 203, 203, 203, 203, 203, 203, 
+	203, 203, 203, 203, 203, 203, 203, 203, 
+	203, 361, 547, 547, 547, 547, 547, 547, 
+	547, 547, 547
 };
 
 static const int indic_syllable_machine_start = 178;
@@ -1556,7 +1358,7 @@
 
 
 
-#line 97 "hb-ot-shape-complex-indic-machine.rl"
+#line 96 "hb-ot-shape-complex-indic-machine.rl"
 
 
 #define found_syllable(syllable_type) \
@@ -1576,7 +1378,7 @@
   int cs;
   hb_glyph_info_t *info = buffer->info;
   
-#line 1580 "hb-ot-shape-complex-indic-machine.hh"
+#line 1382 "hb-ot-shape-complex-indic-machine.hh"
 	{
 	cs = indic_syllable_machine_start;
 	ts = 0;
@@ -1584,7 +1386,7 @@
 	act = 0;
 	}
 
-#line 118 "hb-ot-shape-complex-indic-machine.rl"
+#line 117 "hb-ot-shape-complex-indic-machine.rl"
 
 
   p = 0;
@@ -1593,7 +1395,7 @@
   unsigned int last = 0;
   unsigned int syllable_serial = 1;
   
-#line 1597 "hb-ot-shape-complex-indic-machine.hh"
+#line 1399 "hb-ot-shape-complex-indic-machine.hh"
 	{
 	int _slen;
 	int _trans;
@@ -1607,7 +1409,7 @@
 #line 1 "NONE"
 	{ts = p;}
 	break;
-#line 1611 "hb-ot-shape-complex-indic-machine.hh"
+#line 1413 "hb-ot-shape-complex-indic-machine.hh"
 	}
 
 	_keys = _indic_syllable_machine_trans_keys + (cs<<1);
@@ -1630,71 +1432,71 @@
 	{te = p+1;}
 	break;
 	case 15:
-#line 88 "hb-ot-shape-complex-indic-machine.rl"
+#line 87 "hb-ot-shape-complex-indic-machine.rl"
 	{te = p+1;{ found_syllable (consonant_syllable); }}
 	break;
 	case 17:
-#line 89 "hb-ot-shape-complex-indic-machine.rl"
+#line 88 "hb-ot-shape-complex-indic-machine.rl"
 	{te = p+1;{ found_syllable (vowel_syllable); }}
 	break;
 	case 22:
-#line 90 "hb-ot-shape-complex-indic-machine.rl"
+#line 89 "hb-ot-shape-complex-indic-machine.rl"
 	{te = p+1;{ found_syllable (standalone_cluster); }}
 	break;
 	case 24:
-#line 91 "hb-ot-shape-complex-indic-machine.rl"
+#line 90 "hb-ot-shape-complex-indic-machine.rl"
 	{te = p+1;{ found_syllable (symbol_cluster); }}
 	break;
 	case 19:
-#line 92 "hb-ot-shape-complex-indic-machine.rl"
+#line 91 "hb-ot-shape-complex-indic-machine.rl"
 	{te = p+1;{ found_syllable (broken_cluster); }}
 	break;
 	case 12:
-#line 93 "hb-ot-shape-complex-indic-machine.rl"
+#line 92 "hb-ot-shape-complex-indic-machine.rl"
 	{te = p+1;{ found_syllable (non_indic_cluster); }}
 	break;
 	case 14:
-#line 88 "hb-ot-shape-complex-indic-machine.rl"
+#line 87 "hb-ot-shape-complex-indic-machine.rl"
 	{te = p;p--;{ found_syllable (consonant_syllable); }}
 	break;
 	case 16:
-#line 89 "hb-ot-shape-complex-indic-machine.rl"
+#line 88 "hb-ot-shape-complex-indic-machine.rl"
 	{te = p;p--;{ found_syllable (vowel_syllable); }}
 	break;
 	case 21:
-#line 90 "hb-ot-shape-complex-indic-machine.rl"
+#line 89 "hb-ot-shape-complex-indic-machine.rl"
 	{te = p;p--;{ found_syllable (standalone_cluster); }}
 	break;
 	case 23:
-#line 91 "hb-ot-shape-complex-indic-machine.rl"
+#line 90 "hb-ot-shape-complex-indic-machine.rl"
 	{te = p;p--;{ found_syllable (symbol_cluster); }}
 	break;
 	case 18:
-#line 92 "hb-ot-shape-complex-indic-machine.rl"
+#line 91 "hb-ot-shape-complex-indic-machine.rl"
 	{te = p;p--;{ found_syllable (broken_cluster); }}
 	break;
 	case 20:
-#line 93 "hb-ot-shape-complex-indic-machine.rl"
+#line 92 "hb-ot-shape-complex-indic-machine.rl"
 	{te = p;p--;{ found_syllable (non_indic_cluster); }}
 	break;
 	case 1:
-#line 88 "hb-ot-shape-complex-indic-machine.rl"
+#line 87 "hb-ot-shape-complex-indic-machine.rl"
 	{{p = ((te))-1;}{ found_syllable (consonant_syllable); }}
 	break;
 	case 3:
-#line 89 "hb-ot-shape-complex-indic-machine.rl"
+#line 88 "hb-ot-shape-complex-indic-machine.rl"
 	{{p = ((te))-1;}{ found_syllable (vowel_syllable); }}
 	break;
 	case 7:
-#line 90 "hb-ot-shape-complex-indic-machine.rl"
+#line 89 "hb-ot-shape-complex-indic-machine.rl"
 	{{p = ((te))-1;}{ found_syllable (standalone_cluster); }}
 	break;
 	case 9:
-#line 91 "hb-ot-shape-complex-indic-machine.rl"
+#line 90 "hb-ot-shape-complex-indic-machine.rl"
 	{{p = ((te))-1;}{ found_syllable (symbol_cluster); }}
 	break;
 	case 4:
-#line 92 "hb-ot-shape-complex-indic-machine.rl"
+#line 91 "hb-ot-shape-complex-indic-machine.rl"
 	{{p = ((te))-1;}{ found_syllable (broken_cluster); }}
 	break;
 	case 5:
@@ -1715,22 +1517,22 @@
 	case 8:
 #line 1 "NONE"
 	{te = p+1;}
-#line 88 "hb-ot-shape-complex-indic-machine.rl"
+#line 87 "hb-ot-shape-complex-indic-machine.rl"
 	{act = 1;}
 	break;
 	case 6:
 #line 1 "NONE"
 	{te = p+1;}
-#line 92 "hb-ot-shape-complex-indic-machine.rl"
+#line 91 "hb-ot-shape-complex-indic-machine.rl"
 	{act = 5;}
 	break;
 	case 13:
 #line 1 "NONE"
 	{te = p+1;}
-#line 93 "hb-ot-shape-complex-indic-machine.rl"
+#line 92 "hb-ot-shape-complex-indic-machine.rl"
 	{act = 6;}
 	break;
-#line 1734 "hb-ot-shape-complex-indic-machine.hh"
+#line 1536 "hb-ot-shape-complex-indic-machine.hh"
 	}
 
 _again:
@@ -1739,7 +1541,7 @@
 #line 1 "NONE"
 	{ts = 0;}
 	break;
-#line 1743 "hb-ot-shape-complex-indic-machine.hh"
+#line 1545 "hb-ot-shape-complex-indic-machine.hh"
 	}
 
 	if ( ++p != pe )
@@ -1755,7 +1557,7 @@
 
 	}
 
-#line 127 "hb-ot-shape-complex-indic-machine.rl"
+#line 126 "hb-ot-shape-complex-indic-machine.rl"
 
 }
 

Modified: trunk/Build/source/libs/harfbuzz/harfbuzz-src/src/hb-ot-shape-complex-indic-machine.rl
===================================================================
--- trunk/Build/source/libs/harfbuzz/harfbuzz-src/src/hb-ot-shape-complex-indic-machine.rl	2016-07-21 23:20:53 UTC (rev 41747)
+++ trunk/Build/source/libs/harfbuzz/harfbuzz-src/src/hb-ot-shape-complex-indic-machine.rl	2016-07-21 23:35:31 UTC (rev 41748)
@@ -57,7 +57,6 @@
 Ra    = 16;
 CM    = 17;
 Symbol= 18;
-CM2   = 31;
 
 c = (C | Ra);			# is_consonant
 n = ((ZWNJ?.RS)? (N.N?)?);	# is_consonant_modifier
@@ -73,7 +72,7 @@
 place_holder = PLACEHOLDER | DOTTEDCIRCLE;
 halant_group = (z?.h.(ZWJ.N?)?);
 final_halant_group = halant_group | h.ZWNJ;
-medial_group = CM?.CM2?;
+medial_group = CM?;
 halant_or_matra_group = (final_halant_group | (h.ZWJ)? matra_group{0,4}) (Coeng (cn|V))?;
 
 

Modified: trunk/Build/source/libs/harfbuzz/harfbuzz-src/src/hb-ot-shape-complex-indic-private.hh
===================================================================
--- trunk/Build/source/libs/harfbuzz/harfbuzz-src/src/hb-ot-shape-complex-indic-private.hh	2016-07-21 23:20:53 UTC (rev 41747)
+++ trunk/Build/source/libs/harfbuzz/harfbuzz-src/src/hb-ot-shape-complex-indic-private.hh	2016-07-21 23:35:31 UTC (rev 41748)
@@ -60,11 +60,10 @@
   OT_Repha = 15, /* Atomically-encoded logical or visual repha. */
   OT_Ra = 16,
   OT_CM = 17,  /* Consonant-Medial. */
-  OT_Symbol = 18, /* Avagraha, etc that take marks (SM,A,VD). */
-  OT_CM2 = 31 /* Consonant-Medial, second slot. */
+  OT_Symbol = 18 /* Avagraha, etc that take marks (SM,A,VD). */
 };
 
-#define MEDIAL_FLAGS (FLAG (OT_CM) | FLAG (OT_CM2))
+#define MEDIAL_FLAGS (FLAG (OT_CM))
 
 /* Note:
  *

Modified: trunk/Build/source/libs/harfbuzz/harfbuzz-src/src/hb-ot-shape-complex-indic-table.cc
===================================================================
--- trunk/Build/source/libs/harfbuzz/harfbuzz-src/src/hb-ot-shape-complex-indic-table.cc	2016-07-21 23:20:53 UTC (rev 41747)
+++ trunk/Build/source/libs/harfbuzz/harfbuzz-src/src/hb-ot-shape-complex-indic-table.cc	2016-07-21 23:35:31 UTC (rev 41748)
@@ -2,35 +2,35 @@
 /*
  * The following table is generated by running:
  *
- *   ./gen-indic-table.py IndicSyllabicCategory.txt IndicMatraCategory.txt Blocks.txt
+ *   ./gen-indic-table.py IndicSyllabicCategory.txt IndicPositionalCategory.txt Blocks.txt
  *
  * on files with these headers:
  *
- * # IndicSyllabicCategory-8.0.0.txt
- * # Date: 2015-05-12, 10:00:00 GMT [RP, KW, LI]
- * # IndicPositionalCategory-8.0.0.txt
- * # Date: 2015-05-12, 10:00:00 GMT [RP, KW, LI]
- * # Blocks-8.0.0.txt
- * # Date: 2014-11-10, 23:04:00 GMT [KW]
+ * # IndicSyllabicCategory-9.0.0.txt
+ * # Date: 2016-05-21, 02:46:00 GMT [RP]
+ * # IndicPositionalCategory-9.0.0.txt
+ * # Date: 2016-02-25, 00:48:00 GMT [RP]
+ * # Blocks-9.0.0.txt
+ * # Date: 2016-02-05, 23:48:00 GMT [KW]
  */
 
 #include "hb-ot-shape-complex-indic-private.hh"
 
 
-#define ISC_A	INDIC_SYLLABIC_CATEGORY_AVAGRAHA		/*  13 chars; Avagraha */
-#define ISC_Bi	INDIC_SYLLABIC_CATEGORY_BINDU			/*  60 chars; Bindu */
+#define ISC_A	INDIC_SYLLABIC_CATEGORY_AVAGRAHA		/*  15 chars; Avagraha */
+#define ISC_Bi	INDIC_SYLLABIC_CATEGORY_BINDU			/*  67 chars; Bindu */
 #define ISC_BJN	INDIC_SYLLABIC_CATEGORY_BRAHMI_JOINING_NUMBER	/*  20 chars; Brahmi_Joining_Number */
-#define ISC_Ca	INDIC_SYLLABIC_CATEGORY_CANTILLATION_MARK	/*  52 chars; Cantillation_Mark */
-#define ISC_C	INDIC_SYLLABIC_CATEGORY_CONSONANT		/* 1805 chars; Consonant */
-#define ISC_CD	INDIC_SYLLABIC_CATEGORY_CONSONANT_DEAD		/*   7 chars; Consonant_Dead */
+#define ISC_Ca	INDIC_SYLLABIC_CATEGORY_CANTILLATION_MARK	/*  53 chars; Cantillation_Mark */
+#define ISC_C	INDIC_SYLLABIC_CATEGORY_CONSONANT		/* 1907 chars; Consonant */
+#define ISC_CD	INDIC_SYLLABIC_CATEGORY_CONSONANT_DEAD		/*  10 chars; Consonant_Dead */
 #define ISC_CF	INDIC_SYLLABIC_CATEGORY_CONSONANT_FINAL		/*  62 chars; Consonant_Final */
 #define ISC_CHL	INDIC_SYLLABIC_CATEGORY_CONSONANT_HEAD_LETTER	/*   5 chars; Consonant_Head_Letter */
 #define ISC_CK	INDIC_SYLLABIC_CATEGORY_CONSONANT_KILLER	/*   2 chars; Consonant_Killer */
 #define ISC_CM	INDIC_SYLLABIC_CATEGORY_CONSONANT_MEDIAL	/*  22 chars; Consonant_Medial */
-#define ISC_CP	INDIC_SYLLABIC_CATEGORY_CONSONANT_PLACEHOLDER	/*  13 chars; Consonant_Placeholder */
+#define ISC_CP	INDIC_SYLLABIC_CATEGORY_CONSONANT_PLACEHOLDER	/*  16 chars; Consonant_Placeholder */
 #define ISC_CPR	INDIC_SYLLABIC_CATEGORY_CONSONANT_PRECEDING_REPHA	/*   1 chars; Consonant_Preceding_Repha */
 #define ISC_CPrf	INDIC_SYLLABIC_CATEGORY_CONSONANT_PREFIXED	/*   2 chars; Consonant_Prefixed */
-#define ISC_CS	INDIC_SYLLABIC_CATEGORY_CONSONANT_SUBJOINED	/*  61 chars; Consonant_Subjoined */
+#define ISC_CS	INDIC_SYLLABIC_CATEGORY_CONSONANT_SUBJOINED	/*  90 chars; Consonant_Subjoined */
 #define ISC_CSR	INDIC_SYLLABIC_CATEGORY_CONSONANT_SUCCEEDING_REPHA	/*   4 chars; Consonant_Succeeding_Repha */
 #define ISC_CWS	INDIC_SYLLABIC_CATEGORY_CONSONANT_WITH_STACKER	/*   4 chars; Consonant_With_Stacker */
 #define ISC_GM	INDIC_SYLLABIC_CATEGORY_GEMINATION_MARK		/*   2 chars; Gemination_Mark */
@@ -38,29 +38,29 @@
 #define ISC_ZWJ	INDIC_SYLLABIC_CATEGORY_JOINER			/*   1 chars; Joiner */
 #define ISC_ML	INDIC_SYLLABIC_CATEGORY_MODIFYING_LETTER	/*   1 chars; Modifying_Letter */
 #define ISC_ZWNJ	INDIC_SYLLABIC_CATEGORY_NON_JOINER		/*   1 chars; Non_Joiner */
-#define ISC_N	INDIC_SYLLABIC_CATEGORY_NUKTA			/*  23 chars; Nukta */
-#define ISC_Nd	INDIC_SYLLABIC_CATEGORY_NUMBER			/* 420 chars; Number */
+#define ISC_N	INDIC_SYLLABIC_CATEGORY_NUKTA			/*  24 chars; Nukta */
+#define ISC_Nd	INDIC_SYLLABIC_CATEGORY_NUMBER			/* 459 chars; Number */
 #define ISC_NJ	INDIC_SYLLABIC_CATEGORY_NUMBER_JOINER		/*   1 chars; Number_Joiner */
 #define ISC_x	INDIC_SYLLABIC_CATEGORY_OTHER			/*   1 chars; Other */
 #define ISC_PK	INDIC_SYLLABIC_CATEGORY_PURE_KILLER		/*  16 chars; Pure_Killer */
 #define ISC_RS	INDIC_SYLLABIC_CATEGORY_REGISTER_SHIFTER	/*   2 chars; Register_Shifter */
-#define ISC_SM	INDIC_SYLLABIC_CATEGORY_SYLLABLE_MODIFIER	/*  20 chars; Syllable_Modifier */
+#define ISC_SM	INDIC_SYLLABIC_CATEGORY_SYLLABLE_MODIFIER	/*  22 chars; Syllable_Modifier */
 #define ISC_TL	INDIC_SYLLABIC_CATEGORY_TONE_LETTER		/*   7 chars; Tone_Letter */
 #define ISC_TM	INDIC_SYLLABIC_CATEGORY_TONE_MARK		/*  42 chars; Tone_Mark */
-#define ISC_V	INDIC_SYLLABIC_CATEGORY_VIRAMA			/*  22 chars; Virama */
-#define ISC_Vs	INDIC_SYLLABIC_CATEGORY_VISARGA			/*  29 chars; Visarga */
+#define ISC_V	INDIC_SYLLABIC_CATEGORY_VIRAMA			/*  24 chars; Virama */
+#define ISC_Vs	INDIC_SYLLABIC_CATEGORY_VISARGA			/*  31 chars; Visarga */
 #define ISC_Vo	INDIC_SYLLABIC_CATEGORY_VOWEL			/*  30 chars; Vowel */
-#define ISC_M	INDIC_SYLLABIC_CATEGORY_VOWEL_DEPENDENT		/* 572 chars; Vowel_Dependent */
-#define ISC_VI	INDIC_SYLLABIC_CATEGORY_VOWEL_INDEPENDENT	/* 404 chars; Vowel_Independent */
+#define ISC_M	INDIC_SYLLABIC_CATEGORY_VOWEL_DEPENDENT		/* 602 chars; Vowel_Dependent */
+#define ISC_VI	INDIC_SYLLABIC_CATEGORY_VOWEL_INDEPENDENT	/* 431 chars; Vowel_Independent */
 
-#define IMC_B	INDIC_MATRA_CATEGORY_BOTTOM			/* 256 chars; Bottom */
+#define IMC_B	INDIC_MATRA_CATEGORY_BOTTOM			/* 300 chars; Bottom */
 #define IMC_BR	INDIC_MATRA_CATEGORY_BOTTOM_AND_RIGHT		/*   2 chars; Bottom_And_Right */
-#define IMC_L	INDIC_MATRA_CATEGORY_LEFT			/*  55 chars; Left */
+#define IMC_L	INDIC_MATRA_CATEGORY_LEFT			/*  57 chars; Left */
 #define IMC_LR	INDIC_MATRA_CATEGORY_LEFT_AND_RIGHT		/*  21 chars; Left_And_Right */
 #define IMC_x	INDIC_MATRA_CATEGORY_NOT_APPLICABLE		/*   1 chars; Not_Applicable */
 #define IMC_O	INDIC_MATRA_CATEGORY_OVERSTRUCK			/*  10 chars; Overstruck */
-#define IMC_R	INDIC_MATRA_CATEGORY_RIGHT			/* 249 chars; Right */
-#define IMC_T	INDIC_MATRA_CATEGORY_TOP			/* 324 chars; Top */
+#define IMC_R	INDIC_MATRA_CATEGORY_RIGHT			/* 258 chars; Right */
+#define IMC_T	INDIC_MATRA_CATEGORY_TOP			/* 342 chars; Top */
 #define IMC_TB	INDIC_MATRA_CATEGORY_TOP_AND_BOTTOM		/*  10 chars; Top_And_Bottom */
 #define IMC_TBR	INDIC_MATRA_CATEGORY_TOP_AND_BOTTOM_AND_RIGHT	/*   1 chars; Top_And_Bottom_And_Right */
 #define IMC_TL	INDIC_MATRA_CATEGORY_TOP_AND_LEFT		/*   6 chars; Top_And_Left */
@@ -261,7 +261,7 @@
   /* 0D38 */  _(C,x),  _(C,x),  _(C,x),  _(x,x),  _(x,x),  _(A,x),  _(M,R),  _(M,R),
   /* 0D40 */  _(M,R),  _(M,R),  _(M,R),  _(M,B),  _(M,B),  _(x,x),  _(M,L),  _(M,L),
   /* 0D48 */  _(M,L),  _(x,x), _(M,LR), _(M,LR), _(M,LR),  _(V,T),_(CPR,x),  _(x,x),
-  /* 0D50 */  _(x,x),  _(x,x),  _(x,x),  _(x,x),  _(x,x),  _(x,x),  _(x,x),  _(M,R),
+  /* 0D50 */  _(x,x),  _(x,x),  _(x,x),  _(x,x), _(CD,x), _(CD,x), _(CD,x),  _(M,R),
   /* 0D58 */  _(x,x),  _(x,x),  _(x,x),  _(x,x),  _(x,x),  _(x,x),  _(x,x), _(VI,x),
   /* 0D60 */ _(VI,x), _(VI,x),  _(M,B),  _(M,B),  _(x,x),  _(x,x), _(Nd,x), _(Nd,x),
   /* 0D68 */ _(Nd,x), _(Nd,x), _(Nd,x), _(Nd,x), _(Nd,x), _(Nd,x), _(Nd,x), _(Nd,x),
@@ -312,37 +312,9 @@
   /* 1090 */ _(Nd,x), _(Nd,x), _(Nd,x), _(Nd,x), _(Nd,x), _(Nd,x), _(Nd,x), _(Nd,x),
   /* 1098 */ _(Nd,x), _(Nd,x), _(TM,R), _(TM,R),  _(M,R),  _(M,T),  _(x,x),  _(x,x),
 
-#define indic_offset_0x1700u 1496
+#define indic_offset_0x1780u 1496
 
 
-  /* Tagalog */
-
-  /* 1700 */ _(VI,x), _(VI,x), _(VI,x),  _(C,x),  _(C,x),  _(C,x),  _(C,x),  _(C,x),
-  /* 1708 */  _(C,x),  _(C,x),  _(C,x),  _(C,x),  _(C,x),  _(x,x),  _(C,x),  _(C,x),
-  /* 1710 */  _(C,x),  _(C,x),  _(M,T),  _(M,B), _(PK,B),  _(x,x),  _(x,x),  _(x,x),
-  /* 1718 */  _(x,x),  _(x,x),  _(x,x),  _(x,x),  _(x,x),  _(x,x),  _(x,x),  _(x,x),
-
-  /* Hanunoo */
-
-  /* 1720 */ _(VI,x), _(VI,x), _(VI,x),  _(C,x),  _(C,x),  _(C,x),  _(C,x),  _(C,x),
-  /* 1728 */  _(C,x),  _(C,x),  _(C,x),  _(C,x),  _(C,x),  _(C,x),  _(C,x),  _(C,x),
-  /* 1730 */  _(C,x),  _(C,x),  _(M,T),  _(M,B), _(PK,B),  _(x,x),  _(x,x),  _(x,x),
-  /* 1738 */  _(x,x),  _(x,x),  _(x,x),  _(x,x),  _(x,x),  _(x,x),  _(x,x),  _(x,x),
-
-  /* Buhid */
-
-  /* 1740 */ _(VI,x), _(VI,x), _(VI,x),  _(C,x),  _(C,x),  _(C,x),  _(C,x),  _(C,x),
-  /* 1748 */  _(C,x),  _(C,x),  _(C,x),  _(C,x),  _(C,x),  _(C,x),  _(C,x),  _(C,x),
-  /* 1750 */  _(C,x),  _(C,x),  _(M,T),  _(M,B),  _(x,x),  _(x,x),  _(x,x),  _(x,x),
-  /* 1758 */  _(x,x),  _(x,x),  _(x,x),  _(x,x),  _(x,x),  _(x,x),  _(x,x),  _(x,x),
-
-  /* Tagbanwa */
-
-  /* 1760 */ _(VI,x), _(VI,x), _(VI,x),  _(C,x),  _(C,x),  _(C,x),  _(C,x),  _(C,x),
-  /* 1768 */  _(C,x),  _(C,x),  _(C,x),  _(C,x),  _(C,x),  _(x,x),  _(C,x),  _(C,x),
-  /* 1770 */  _(C,x),  _(x,x),  _(M,T),  _(M,B),  _(x,x),  _(x,x),  _(x,x),  _(x,x),
-  /* 1778 */  _(x,x),  _(x,x),  _(x,x),  _(x,x),  _(x,x),  _(x,x),  _(x,x),  _(x,x),
-
   /* Khmer */
 
   /* 1780 */  _(C,x),  _(C,x),  _(C,x),  _(C,x),  _(C,x),  _(C,x),  _(C,x),  _(C,x),
@@ -356,140 +328,13 @@
   /* 17C0 */ _(M,LR),  _(M,L),  _(M,L),  _(M,L), _(M,LR), _(M,LR), _(Bi,T), _(Vs,R),
   /* 17C8 */  _(M,R), _(RS,T), _(RS,T), _(SM,T),_(CSR,T), _(CK,T), _(SM,T), _(SM,T),
   /* 17D0 */ _(SM,T), _(PK,T), _(IS,x), _(SM,T),  _(x,x),  _(x,x),  _(x,x),  _(x,x),
-  /* 17D8 */  _(x,x),  _(x,x),  _(x,x),  _(x,x),  _(A,x),  _(x,T),  _(x,x),  _(x,x),
+  /* 17D8 */  _(x,x),  _(x,x),  _(x,x),  _(x,x),  _(A,x), _(SM,T),  _(x,x),  _(x,x),
   /* 17E0 */ _(Nd,x), _(Nd,x), _(Nd,x), _(Nd,x), _(Nd,x), _(Nd,x), _(Nd,x), _(Nd,x),
   /* 17E8 */ _(Nd,x), _(Nd,x),  _(x,x),  _(x,x),  _(x,x),  _(x,x),  _(x,x),  _(x,x),
 
-#define indic_offset_0x1900u 1736
+#define indic_offset_0x1cd0u 1608
 
 
-  /* Limbu */
-
-  /* 1900 */ _(CP,x),  _(C,x),  _(C,x),  _(C,x),  _(C,x),  _(C,x),  _(C,x),  _(C,x),
-  /* 1908 */  _(C,x),  _(C,x),  _(C,x),  _(C,x),  _(C,x),  _(C,x),  _(C,x),  _(C,x),
-  /* 1910 */  _(C,x),  _(C,x),  _(C,x),  _(C,x),  _(C,x),  _(C,x),  _(C,x),  _(C,x),
-  /* 1918 */  _(C,x),  _(C,x),  _(C,x),  _(C,x),  _(C,x),  _(C,x),  _(C,x),  _(x,x),
-  /* 1920 */  _(M,T),  _(M,T),  _(M,B),  _(M,R),  _(M,R), _(M,TR), _(M,TR),  _(M,T),
-  /* 1928 */  _(M,T), _(CS,R), _(CS,R), _(CS,R),  _(x,x),  _(x,x),  _(x,x),  _(x,x),
-  /* 1930 */ _(CF,R), _(CF,R), _(Bi,B), _(CF,R), _(CF,R), _(CF,R), _(CF,R), _(CF,R),
-  /* 1938 */ _(CF,R), _(CF,B),  _(M,T), _(SM,B),  _(x,x),  _(x,x),  _(x,x),  _(x,x),
-  /* 1940 */  _(x,x),  _(x,x),  _(x,x),  _(x,x),  _(x,x),  _(x,x), _(Nd,x), _(Nd,x),
-  /* 1948 */ _(Nd,x), _(Nd,x), _(Nd,x), _(Nd,x), _(Nd,x), _(Nd,x), _(Nd,x), _(Nd,x),
-
-  /* Tai Le */
-
-  /* 1950 */  _(C,x),  _(C,x),  _(C,x),  _(C,x),  _(C,x),  _(C,x),  _(C,x),  _(C,x),
-  /* 1958 */  _(C,x),  _(C,x),  _(C,x),  _(C,x),  _(C,x),  _(C,x),  _(C,x),  _(C,x),
-  /* 1960 */  _(C,x),  _(C,x),  _(C,x), _(Vo,x), _(Vo,x), _(Vo,x), _(Vo,x), _(Vo,x),
-  /* 1968 */ _(Vo,x), _(Vo,x), _(Vo,x), _(Vo,x), _(Vo,x), _(Vo,x),  _(x,x),  _(x,x),
-  /* 1970 */ _(TL,x), _(TL,x), _(TL,x), _(TL,x), _(TL,x),  _(x,x),  _(x,x),  _(x,x),
-  /* 1978 */  _(x,x),  _(x,x),  _(x,x),  _(x,x),  _(x,x),  _(x,x),  _(x,x),  _(x,x),
-
-  /* New Tai Lue */
-
-  /* 1980 */  _(C,x),  _(C,x),  _(C,x),  _(C,x),  _(C,x),  _(C,x),  _(C,x),  _(C,x),
-  /* 1988 */  _(C,x),  _(C,x),  _(C,x),  _(C,x),  _(C,x),  _(C,x),  _(C,x),  _(C,x),
-  /* 1990 */  _(C,x),  _(C,x),  _(C,x),  _(C,x),  _(C,x),  _(C,x),  _(C,x),  _(C,x),
-  /* 1998 */  _(C,x),  _(C,x),  _(C,x),  _(C,x),  _(C,x),  _(C,x),  _(C,x),  _(C,x),
-  /* 19A0 */  _(C,x),  _(C,x),  _(C,x),  _(C,x),  _(C,x),  _(C,x),  _(C,x),  _(C,x),
-  /* 19A8 */  _(C,x),  _(C,x),  _(C,x),  _(C,x),  _(x,x),  _(x,x),  _(x,x),  _(x,x),
-  /* 19B0 */  _(M,R),  _(M,R),  _(M,R),  _(M,R),  _(M,R),_(M,VOL),_(M,VOL),_(M,VOL),
-  /* 19B8 */  _(M,R),  _(M,R),_(M,VOL),  _(M,R),  _(M,R),  _(M,R),  _(M,R),  _(M,R),
-  /* 19C0 */  _(M,R), _(CF,x), _(CF,x), _(CF,x), _(CF,x), _(CF,x), _(CF,x), _(CF,x),
-  /* 19C8 */ _(TM,R), _(TM,R),  _(x,x),  _(x,x),  _(x,x),  _(x,x),  _(x,x),  _(x,x),
-  /* 19D0 */ _(Nd,x), _(Nd,x), _(Nd,x), _(Nd,x), _(Nd,x), _(Nd,x), _(Nd,x), _(Nd,x),
-  /* 19D8 */ _(Nd,x), _(Nd,x),  _(x,x),  _(x,x),  _(x,x),  _(x,x),  _(x,x),  _(x,x),
-  /* 19E0 */  _(x,x),  _(x,x),  _(x,x),  _(x,x),  _(x,x),  _(x,x),  _(x,x),  _(x,x),
-  /* 19E8 */  _(x,x),  _(x,x),  _(x,x),  _(x,x),  _(x,x),  _(x,x),  _(x,x),  _(x,x),
-  /* 19F0 */  _(x,x),  _(x,x),  _(x,x),  _(x,x),  _(x,x),  _(x,x),  _(x,x),  _(x,x),
-  /* 19F8 */  _(x,x),  _(x,x),  _(x,x),  _(x,x),  _(x,x),  _(x,x),  _(x,x),  _(x,x),
-
-  /* Buginese */
-
-  /* 1A00 */  _(C,x),  _(C,x),  _(C,x),  _(C,x),  _(C,x),  _(C,x),  _(C,x),  _(C,x),
-  /* 1A08 */  _(C,x),  _(C,x),  _(C,x),  _(C,x),  _(C,x),  _(C,x),  _(C,x),  _(C,x),
-  /* 1A10 */  _(C,x),  _(C,x),  _(C,x),  _(C,x),  _(C,x),  _(C,x),  _(C,x),  _(M,T),
-  /* 1A18 */  _(M,B),  _(M,L),  _(M,R),  _(M,T),  _(x,x),  _(x,x),  _(x,x),  _(x,x),
-
-  /* Tai Tham */
-
-  /* 1A20 */  _(C,x),  _(C,x),  _(C,x),  _(C,x),  _(C,x),  _(C,x),  _(C,x),  _(C,x),
-  /* 1A28 */  _(C,x),  _(C,x),  _(C,x),  _(C,x),  _(C,x),  _(C,x),  _(C,x),  _(C,x),
-  /* 1A30 */  _(C,x),  _(C,x),  _(C,x),  _(C,x),  _(C,x),  _(C,x),  _(C,x),  _(C,x),
-  /* 1A38 */  _(C,x),  _(C,x),  _(C,x),  _(C,x),  _(C,x),  _(C,x),  _(C,x),  _(C,x),
-  /* 1A40 */  _(C,x),  _(C,x),  _(C,x),  _(C,x),  _(C,x),  _(C,x),  _(C,x),  _(C,x),
-  /* 1A48 */  _(C,x),  _(C,x),  _(C,x),  _(C,x),  _(C,x), _(VI,x), _(VI,x), _(VI,x),
-  /* 1A50 */ _(VI,x), _(VI,x), _(VI,x),  _(C,x),  _(C,x), _(CM,L), _(CM,B), _(CF,R),
-  /* 1A58 */ _(CF,T), _(CF,T), _(CF,T), _(CF,B), _(CF,B), _(CF,B), _(CF,B),  _(x,x),
-  /* 1A60 */ _(IS,x),  _(M,R),  _(M,T),  _(M,R),  _(M,R),  _(M,T),  _(M,T),  _(M,T),
-  /* 1A68 */  _(M,T),  _(M,B),  _(M,B),  _(M,T),  _(M,B),  _(M,R),  _(M,L),  _(M,L),
-  /* 1A70 */  _(M,L),  _(M,L),  _(M,L),  _(M,T),  _(M,T), _(TM,T), _(TM,T), _(TM,T),
-  /* 1A78 */ _(TM,T), _(TM,T), _(SM,T), _(SM,T), _(SM,T),  _(x,x),  _(x,x), _(SM,B),
-  /* 1A80 */ _(Nd,x), _(Nd,x), _(Nd,x), _(Nd,x), _(Nd,x), _(Nd,x), _(Nd,x), _(Nd,x),
-  /* 1A88 */ _(Nd,x), _(Nd,x),  _(x,x),  _(x,x),  _(x,x),  _(x,x),  _(x,x),  _(x,x),
-  /* 1A90 */ _(Nd,x), _(Nd,x), _(Nd,x), _(Nd,x), _(Nd,x), _(Nd,x), _(Nd,x), _(Nd,x),
-  /* 1A98 */ _(Nd,x), _(Nd,x),  _(x,x),  _(x,x),  _(x,x),  _(x,x),  _(x,x),  _(x,x),
-
-#define indic_offset_0x1b00u 2152
-
-
-  /* Balinese */
-
-  /* 1B00 */ _(Bi,T), _(Bi,T), _(Bi,T),_(CSR,T), _(Vs,R), _(VI,x), _(VI,x), _(VI,x),
-  /* 1B08 */ _(VI,x), _(VI,x), _(VI,x), _(VI,x), _(VI,x), _(VI,x), _(VI,x), _(VI,x),
-  /* 1B10 */ _(VI,x), _(VI,x), _(VI,x),  _(C,x),  _(C,x),  _(C,x),  _(C,x),  _(C,x),
-  /* 1B18 */  _(C,x),  _(C,x),  _(C,x),  _(C,x),  _(C,x),  _(C,x),  _(C,x),  _(C,x),
-  /* 1B20 */  _(C,x),  _(C,x),  _(C,x),  _(C,x),  _(C,x),  _(C,x),  _(C,x),  _(C,x),
-  /* 1B28 */  _(C,x),  _(C,x),  _(C,x),  _(C,x),  _(C,x),  _(C,x),  _(C,x),  _(C,x),
-  /* 1B30 */  _(C,x),  _(C,x),  _(C,x),  _(C,x),  _(N,T),  _(M,R),  _(M,T),  _(M,T),
-  /* 1B38 */  _(M,B),  _(M,B),  _(M,B), _(M,BR), _(M,TB),_(M,TBR),  _(M,L),  _(M,L),
-  /* 1B40 */ _(M,LR), _(M,LR),  _(M,T), _(M,TR),  _(V,R),  _(C,x),  _(C,x),  _(C,x),
-  /* 1B48 */  _(C,x),  _(C,x),  _(C,x),  _(C,x),  _(x,x),  _(x,x),  _(x,x),  _(x,x),
-  /* 1B50 */ _(Nd,x), _(Nd,x), _(Nd,x), _(Nd,x), _(Nd,x), _(Nd,x), _(Nd,x), _(Nd,x),
-  /* 1B58 */ _(Nd,x), _(Nd,x),  _(x,x),  _(x,x),  _(x,x),  _(x,x),  _(x,x),  _(x,x),
-  /* 1B60 */  _(x,x),  _(x,x),  _(x,x),  _(x,x),  _(x,x),  _(x,x),  _(x,x),  _(x,x),
-  /* 1B68 */  _(x,x),  _(x,x),  _(x,x),  _(x,T),  _(x,B),  _(x,T),  _(x,T),  _(x,T),
-  /* 1B70 */  _(x,T),  _(x,T),  _(x,T),  _(x,T),  _(x,x),  _(x,x),  _(x,x),  _(x,x),
-  /* 1B78 */  _(x,x),  _(x,x),  _(x,x),  _(x,x),  _(x,x),  _(x,x),  _(x,x),  _(x,x),
-
-  /* Sundanese */
-
-  /* 1B80 */ _(Bi,T),_(CSR,T), _(Vs,R), _(VI,x), _(VI,x), _(VI,x), _(VI,x), _(VI,x),
-  /* 1B88 */ _(VI,x), _(VI,x),  _(C,x),  _(C,x),  _(C,x),  _(C,x),  _(C,x),  _(C,x),
-  /* 1B90 */  _(C,x),  _(C,x),  _(C,x),  _(C,x),  _(C,x),  _(C,x),  _(C,x),  _(C,x),
-  /* 1B98 */  _(C,x),  _(C,x),  _(C,x),  _(C,x),  _(C,x),  _(C,x),  _(C,x),  _(C,x),
-  /* 1BA0 */  _(C,x), _(CS,R), _(CS,B), _(CS,B),  _(M,T),  _(M,B),  _(M,L),  _(M,R),
-  /* 1BA8 */  _(M,T),  _(M,T), _(PK,R), _(IS,x), _(CS,B), _(CS,B),  _(C,x),  _(C,x),
-  /* 1BB0 */ _(Nd,x), _(Nd,x), _(Nd,x), _(Nd,x), _(Nd,x), _(Nd,x), _(Nd,x), _(Nd,x),
-  /* 1BB8 */ _(Nd,x), _(Nd,x),  _(A,x),  _(C,x),  _(C,x),  _(C,x), _(CF,x), _(CF,x),
-
-  /* Batak */
-
-  /* 1BC0 */  _(C,x),  _(C,x),  _(C,x),  _(C,x),  _(C,x),  _(C,x),  _(C,x),  _(C,x),
-  /* 1BC8 */  _(C,x),  _(C,x),  _(C,x),  _(C,x),  _(C,x),  _(C,x),  _(C,x),  _(C,x),
-  /* 1BD0 */  _(C,x),  _(C,x),  _(C,x),  _(C,x),  _(C,x),  _(C,x),  _(C,x),  _(C,x),
-  /* 1BD8 */  _(C,x),  _(C,x),  _(C,x),  _(C,x),  _(C,x),  _(C,x),  _(C,x),  _(C,x),
-  /* 1BE0 */  _(C,x),  _(C,x),  _(C,x),  _(C,x), _(VI,x), _(VI,x),  _(N,T),  _(M,R),
-  /* 1BE8 */  _(M,T),  _(M,T),  _(M,R),  _(M,R),  _(M,R),  _(M,T),  _(M,R),  _(M,T),
-  /* 1BF0 */ _(CF,T), _(CF,T), _(PK,R), _(PK,R),  _(x,x),  _(x,x),  _(x,x),  _(x,x),
-  /* 1BF8 */  _(x,x),  _(x,x),  _(x,x),  _(x,x),  _(x,x),  _(x,x),  _(x,x),  _(x,x),
-
-  /* Lepcha */
-
-  /* 1C00 */  _(C,x),  _(C,x),  _(C,x),  _(C,x),  _(C,x),  _(C,x),  _(C,x),  _(C,x),
-  /* 1C08 */  _(C,x),  _(C,x),  _(C,x),  _(C,x),  _(C,x),  _(C,x),  _(C,x),  _(C,x),
-  /* 1C10 */  _(C,x),  _(C,x),  _(C,x),  _(C,x),  _(C,x),  _(C,x),  _(C,x),  _(C,x),
-  /* 1C18 */  _(C,x),  _(C,x),  _(C,x),  _(C,x),  _(C,x),  _(C,x),  _(C,x),  _(C,x),
-  /* 1C20 */  _(C,x),  _(C,x),  _(C,x),  _(C,x), _(CS,R), _(CS,R),  _(M,R),  _(M,L),
-  /* 1C28 */  _(M,L), _(M,TL),  _(M,R),  _(M,R),  _(M,B), _(CF,T), _(CF,T), _(CF,T),
-  /* 1C30 */ _(CF,T), _(CF,T), _(CF,T), _(CF,T), _(Bi,L), _(Bi,L), _(SM,T),  _(N,B),
-  /* 1C38 */  _(x,x),  _(x,x),  _(x,x),  _(x,x),  _(x,x),  _(x,x),  _(x,x),  _(x,x),
-  /* 1C40 */ _(Nd,x), _(Nd,x), _(Nd,x), _(Nd,x), _(Nd,x), _(Nd,x), _(Nd,x), _(Nd,x),
-  /* 1C48 */ _(Nd,x), _(Nd,x),  _(x,x),  _(x,x),  _(x,x),  _(C,x),  _(C,x),  _(C,x),
-
-#define indic_offset_0x1cd0u 2488
-
-
   /* Vedic Extensions */
 
   /* 1CD0 */ _(Ca,T), _(Ca,T), _(Ca,T),  _(x,x), _(Ca,O), _(Ca,B), _(Ca,B), _(Ca,B),
@@ -499,7 +344,7 @@
   /* 1CF0 */  _(x,x),  _(x,x), _(Vs,x), _(Vs,x), _(Ca,T),  _(x,x),  _(x,x),  _(x,x),
   /* 1CF8 */ _(Ca,x), _(Ca,x),  _(x,x),  _(x,x),  _(x,x),  _(x,x),  _(x,x),  _(x,x),
 
-#define indic_offset_0x2008u 2536
+#define indic_offset_0x2008u 1656
 
 
   /* General Punctuation */
@@ -507,7 +352,7 @@
   /* 2008 */  _(x,x),  _(x,x),  _(x,x),  _(x,x),_(ZWNJ,x),_(ZWJ,x),  _(x,x),  _(x,x),
   /* 2010 */ _(CP,x), _(CP,x), _(CP,x), _(CP,x), _(CP,x),  _(x,x),  _(x,x),  _(x,x),
 
-#define indic_offset_0x2070u 2552
+#define indic_offset_0x2070u 1672
 
 
   /* Superscripts and Subscripts */
@@ -516,90 +361,18 @@
   /* 2078 */  _(x,x),  _(x,x),  _(x,x),  _(x,x),  _(x,x),  _(x,x),  _(x,x),  _(x,x),
   /* 2080 */  _(x,x),  _(x,x), _(SM,x), _(SM,x), _(SM,x),  _(x,x),  _(x,x),  _(x,x),
 
-#define indic_offset_0xa800u 2576
+#define indic_offset_0xa8e0u 1696
 
 
-  /* Syloti Nagri */
-
-  /* A800 */ _(VI,x), _(VI,x),  _(x,x), _(VI,x), _(VI,x), _(VI,x), _(PK,T),  _(C,x),
-  /* A808 */  _(C,x),  _(C,x),  _(C,x), _(Bi,T),  _(C,x),  _(C,x),  _(C,x),  _(C,x),
-  /* A810 */  _(C,x),  _(C,x),  _(C,x),  _(C,x),  _(C,x),  _(C,x),  _(C,x),  _(C,x),
-  /* A818 */  _(C,x),  _(C,x),  _(C,x),  _(C,x),  _(C,x),  _(C,x),  _(C,x),  _(C,x),
-  /* A820 */  _(C,x),  _(C,x),  _(C,x),  _(M,R),  _(M,R),  _(M,B),  _(M,T),  _(M,R),
-  /* A828 */  _(x,x),  _(x,x),  _(x,x),  _(x,x),  _(x,x),  _(x,x),  _(x,x),  _(x,x),
-  /* A830 */  _(x,x),  _(x,x),  _(x,x),  _(x,x),  _(x,x),  _(x,x),  _(x,x),  _(x,x),
-  /* A838 */  _(x,x),  _(x,x),  _(x,x),  _(x,x),  _(x,x),  _(x,x),  _(x,x),  _(x,x),
-
-  /* Phags-pa */
-
-  /* A840 */  _(C,x),  _(C,x),  _(C,x),  _(C,x),  _(C,x),  _(C,x),  _(C,x),  _(C,x),
-  /* A848 */  _(C,x),  _(C,x),  _(C,x),  _(C,x),  _(C,x),  _(C,x),  _(C,x),  _(C,x),
-  /* A850 */  _(C,x),  _(C,x),  _(C,x),  _(C,x),  _(C,x),  _(C,x),  _(C,x),  _(C,x),
-  /* A858 */  _(C,x),  _(C,x),  _(C,x),  _(C,x),  _(C,x),  _(C,x), _(Vo,x), _(Vo,x),
-  /* A860 */ _(Vo,x), _(Vo,x),  _(C,x),  _(C,x),  _(C,x),  _(C,x), _(Vo,x), _(CS,x),
-  /* A868 */ _(CS,x),  _(C,x),  _(C,x),  _(C,x),  _(C,x),  _(C,x),  _(C,x),  _(C,x),
-  /* A870 */  _(C,x), _(CS,x),  _(C,x), _(Bi,x),  _(x,x),  _(x,x),  _(x,x),  _(x,x),
-  /* A878 */  _(x,x),  _(x,x),  _(x,x),  _(x,x),  _(x,x),  _(x,x),  _(x,x),  _(x,x),
-
-  /* Saurashtra */
-
-  /* A880 */ _(Bi,R), _(Vs,R), _(VI,x), _(VI,x), _(VI,x), _(VI,x), _(VI,x), _(VI,x),
-  /* A888 */ _(VI,x), _(VI,x), _(VI,x), _(VI,x), _(VI,x), _(VI,x), _(VI,x), _(VI,x),
-  /* A890 */ _(VI,x), _(VI,x),  _(C,x),  _(C,x),  _(C,x),  _(C,x),  _(C,x),  _(C,x),
-  /* A898 */  _(C,x),  _(C,x),  _(C,x),  _(C,x),  _(C,x),  _(C,x),  _(C,x),  _(C,x),
-  /* A8A0 */  _(C,x),  _(C,x),  _(C,x),  _(C,x),  _(C,x),  _(C,x),  _(C,x),  _(C,x),
-  /* A8A8 */  _(C,x),  _(C,x),  _(C,x),  _(C,x),  _(C,x),  _(C,x),  _(C,x),  _(C,x),
-  /* A8B0 */  _(C,x),  _(C,x),  _(C,x),  _(C,x), _(CF,R),  _(M,R),  _(M,R),  _(M,R),
-  /* A8B8 */  _(M,R),  _(M,R),  _(M,R),  _(M,R),  _(M,R),  _(M,R),  _(M,R),  _(M,R),
-  /* A8C0 */  _(M,R),  _(M,R),  _(M,R),  _(M,R),  _(V,B),  _(x,x),  _(x,x),  _(x,x),
-  /* A8C8 */  _(x,x),  _(x,x),  _(x,x),  _(x,x),  _(x,x),  _(x,x),  _(x,x),  _(x,x),
-  /* A8D0 */ _(Nd,x), _(Nd,x), _(Nd,x), _(Nd,x), _(Nd,x), _(Nd,x), _(Nd,x), _(Nd,x),
-  /* A8D8 */ _(Nd,x), _(Nd,x),  _(x,x),  _(x,x),  _(x,x),  _(x,x),  _(x,x),  _(x,x),
-
   /* Devanagari Extended */
 
   /* A8E0 */ _(Ca,T), _(Ca,T), _(Ca,T), _(Ca,T), _(Ca,T), _(Ca,T), _(Ca,T), _(Ca,T),
   /* A8E8 */ _(Ca,T), _(Ca,T), _(Ca,T), _(Ca,T), _(Ca,T), _(Ca,T), _(Ca,T), _(Ca,T),
   /* A8F0 */ _(Ca,T), _(Ca,T),  _(x,x),  _(x,x),  _(x,x),  _(x,x),  _(x,x),  _(x,x),
-  /* A8F8 */  _(x,x),  _(x,x),  _(x,x),  _(x,x),  _(x,x),  _(x,x),  _(x,x),  _(x,x),
 
-  /* Kayah Li */
+#define indic_offset_0xa9e0u 1720
 
-  /* A900 */ _(Nd,x), _(Nd,x), _(Nd,x), _(Nd,x), _(Nd,x), _(Nd,x), _(Nd,x), _(Nd,x),
-  /* A908 */ _(Nd,x), _(Nd,x),  _(C,x),  _(C,x),  _(C,x),  _(C,x),  _(C,x),  _(C,x),
-  /* A910 */  _(C,x),  _(C,x),  _(C,x),  _(C,x),  _(C,x),  _(C,x),  _(C,x),  _(C,x),
-  /* A918 */  _(C,x),  _(C,x),  _(C,x),  _(C,x),  _(C,x),  _(C,x),  _(C,x),  _(C,x),
-  /* A920 */  _(C,x),  _(C,x), _(Vo,x), _(Vo,x), _(Vo,x), _(Vo,x), _(Vo,x), _(Vo,x),
-  /* A928 */ _(Vo,x), _(Vo,x), _(Vo,x), _(TM,B), _(TM,B), _(TM,B),  _(x,x),  _(x,x),
 
-  /* Rejang */
-
-  /* A930 */  _(C,x),  _(C,x),  _(C,x),  _(C,x),  _(C,x),  _(C,x),  _(C,x),  _(C,x),
-  /* A938 */  _(C,x),  _(C,x),  _(C,x),  _(C,x),  _(C,x),  _(C,x),  _(C,x),  _(C,x),
-  /* A940 */  _(C,x),  _(C,x),  _(C,x),  _(C,x),  _(C,x),  _(C,x),  _(C,x),  _(M,B),
-  /* A948 */  _(M,B),  _(M,B),  _(M,T),  _(M,B),  _(M,B),  _(M,B),  _(M,B), _(CF,T),
-  /* A950 */ _(CF,T), _(CF,T), _(CF,R), _(PK,R),  _(x,x),  _(x,x),  _(x,x),  _(x,x),
-  /* A958 */  _(x,x),  _(x,x),  _(x,x),  _(x,x),  _(x,x),  _(x,x),  _(x,x),  _(x,x),
-  /* A960 */  _(x,x),  _(x,x),  _(x,x),  _(x,x),  _(x,x),  _(x,x),  _(x,x),  _(x,x),
-  /* A968 */  _(x,x),  _(x,x),  _(x,x),  _(x,x),  _(x,x),  _(x,x),  _(x,x),  _(x,x),
-  /* A970 */  _(x,x),  _(x,x),  _(x,x),  _(x,x),  _(x,x),  _(x,x),  _(x,x),  _(x,x),
-  /* A978 */  _(x,x),  _(x,x),  _(x,x),  _(x,x),  _(x,x),  _(x,x),  _(x,x),  _(x,x),
-
-  /* Javanese */
-
-  /* A980 */ _(Bi,T), _(Bi,T),_(CSR,T), _(Vs,R), _(VI,x), _(VI,x), _(VI,x), _(VI,x),
-  /* A988 */ _(VI,x),  _(C,x),  _(C,x),  _(C,x), _(VI,x), _(VI,x), _(VI,x),  _(C,x),
-  /* A990 */  _(C,x),  _(C,x),  _(C,x),  _(C,x),  _(C,x),  _(C,x),  _(C,x),  _(C,x),
-  /* A998 */  _(C,x),  _(C,x),  _(C,x),  _(C,x),  _(C,x),  _(C,x),  _(C,x),  _(C,x),
-  /* A9A0 */  _(C,x),  _(C,x),  _(C,x),  _(C,x),  _(C,x),  _(C,x),  _(C,x),  _(C,x),
-  /* A9A8 */  _(C,x),  _(C,x),  _(C,x),  _(C,x),  _(C,x),  _(C,x),  _(C,x),  _(C,x),
-  /* A9B0 */  _(C,x),  _(C,x),  _(C,x),  _(N,T),  _(M,R),  _(M,R),  _(M,T),  _(M,T),
-  /* A9B8 */  _(M,B),  _(M,B),  _(M,L),  _(M,L),  _(M,T), _(CS,R), _(CM,R), _(CM,R),
-  /* A9C0 */ _(V,BR),  _(x,x),  _(x,x),  _(x,x),  _(x,x),  _(x,x),  _(x,x),  _(x,x),
-  /* A9C8 */  _(x,x),  _(x,x),  _(x,x),  _(x,x),  _(x,x),  _(x,x),  _(x,x),  _(x,x),
-  /* A9D0 */ _(Nd,x), _(Nd,x), _(Nd,x), _(Nd,x), _(Nd,x), _(Nd,x), _(Nd,x), _(Nd,x),
-  /* A9D8 */ _(Nd,x), _(Nd,x),  _(x,x),  _(x,x),  _(x,x),  _(x,x),  _(x,x),  _(x,x),
-
   /* Myanmar Extended-B */
 
   /* A9E0 */  _(C,x),  _(C,x),  _(C,x),  _(C,x),  _(C,x),  _(M,T),  _(x,x),  _(C,x),
@@ -607,302 +380,18 @@
   /* A9F0 */ _(Nd,x), _(Nd,x), _(Nd,x), _(Nd,x), _(Nd,x), _(Nd,x), _(Nd,x), _(Nd,x),
   /* A9F8 */ _(Nd,x), _(Nd,x),  _(C,x),  _(C,x),  _(C,x),  _(C,x),  _(C,x),  _(x,x),
 
-  /* Cham */
+#define indic_offset_0xaa60u 1752
 
-  /* AA00 */ _(VI,x), _(VI,x), _(VI,x), _(VI,x), _(VI,x), _(VI,x),  _(C,x),  _(C,x),
-  /* AA08 */  _(C,x),  _(C,x),  _(C,x),  _(C,x),  _(C,x),  _(C,x),  _(C,x),  _(C,x),
-  /* AA10 */  _(C,x),  _(C,x),  _(C,x),  _(C,x),  _(C,x),  _(C,x),  _(C,x),  _(C,x),
-  /* AA18 */  _(C,x),  _(C,x),  _(C,x),  _(C,x),  _(C,x),  _(C,x),  _(C,x),  _(C,x),
-  /* AA20 */  _(C,x),  _(C,x),  _(C,x),  _(C,x),  _(C,x),  _(C,x),  _(C,x),  _(C,x),
-  /* AA28 */  _(C,x),  _(M,T),  _(M,T),  _(M,T),  _(M,T),  _(M,B),  _(M,T),  _(M,L),
-  /* AA30 */  _(M,L),  _(M,T),  _(M,B), _(CM,R), _(CM,L), _(CM,B), _(CM,B),  _(x,x),
-  /* AA38 */  _(x,x),  _(x,x),  _(x,x),  _(x,x),  _(x,x),  _(x,x),  _(x,x),  _(x,x),
-  /* AA40 */ _(CF,x), _(CF,x), _(CF,x), _(CF,T), _(CF,x), _(CF,x), _(CF,x), _(CF,x),
-  /* AA48 */ _(CF,x), _(CF,x), _(CF,x), _(CF,x), _(CF,T), _(CF,R),  _(x,x),  _(x,x),
-  /* AA50 */ _(Nd,x), _(Nd,x), _(Nd,x), _(Nd,x), _(Nd,x), _(Nd,x), _(Nd,x), _(Nd,x),
-  /* AA58 */ _(Nd,x), _(Nd,x),  _(x,x),  _(x,x),  _(x,x),  _(x,x),  _(x,x),  _(x,x),
 
   /* Myanmar Extended-A */
 
   /* AA60 */  _(C,x),  _(C,x),  _(C,x),  _(C,x),  _(C,x),  _(C,x),  _(C,x),  _(C,x),
   /* AA68 */  _(C,x),  _(C,x),  _(C,x),  _(C,x),  _(C,x),  _(C,x),  _(C,x),  _(C,x),
-  /* AA70 */  _(x,x),  _(C,x),  _(C,x),  _(C,x),  _(x,x),  _(x,x),  _(x,x),  _(x,x),
+  /* AA70 */  _(x,x),  _(C,x),  _(C,x),  _(C,x), _(CP,x), _(CP,x), _(CP,x),  _(x,x),
   /* AA78 */  _(x,x),  _(x,x),  _(C,x), _(TM,R), _(TM,T), _(TM,R),  _(C,x),  _(C,x),
 
-  /* Tai Viet */
+}; /* Table items: 1784; occupancy: 69% */
 
-  /* AA80 */  _(C,x),  _(C,x),  _(C,x),  _(C,x),  _(C,x),  _(C,x),  _(C,x),  _(C,x),
-  /* AA88 */  _(C,x),  _(C,x),  _(C,x),  _(C,x),  _(C,x),  _(C,x),  _(C,x),  _(C,x),
-  /* AA90 */  _(C,x),  _(C,x),  _(C,x),  _(C,x),  _(C,x),  _(C,x),  _(C,x),  _(C,x),
-  /* AA98 */  _(C,x),  _(C,x),  _(C,x),  _(C,x),  _(C,x),  _(C,x),  _(C,x),  _(C,x),
-  /* AAA0 */  _(C,x),  _(C,x),  _(C,x),  _(C,x),  _(C,x),  _(C,x),  _(C,x),  _(C,x),
-  /* AAA8 */  _(C,x),  _(C,x),  _(C,x),  _(C,x),  _(C,x),  _(C,x),  _(C,x),  _(C,x),
-  /* AAB0 */  _(M,T),  _(M,R),  _(M,T),  _(M,T),  _(M,B),_(M,VOL),_(M,VOL),  _(M,T),
-  /* AAB8 */  _(M,T),_(M,VOL),  _(M,R),_(M,VOL),_(M,VOL),  _(M,R),  _(M,T), _(TM,T),
-  /* AAC0 */ _(TL,x), _(TM,T), _(TL,x),  _(x,x),  _(x,x),  _(x,x),  _(x,x),  _(x,x),
-  /* AAC8 */  _(x,x),  _(x,x),  _(x,x),  _(x,x),  _(x,x),  _(x,x),  _(x,x),  _(x,x),
-  /* AAD0 */  _(x,x),  _(x,x),  _(x,x),  _(x,x),  _(x,x),  _(x,x),  _(x,x),  _(x,x),
-  /* AAD8 */  _(x,x),  _(x,x),  _(x,x),  _(x,x),  _(x,x),  _(x,x),  _(x,x),  _(x,x),
-
-  /* Meetei Mayek Extensions */
-
-  /* AAE0 */ _(VI,x), _(VI,x),  _(C,x),  _(C,x),  _(C,x),  _(C,x),  _(C,x),  _(C,x),
-  /* AAE8 */  _(C,x),  _(C,x),  _(C,x),  _(M,L),  _(M,B),  _(M,T),  _(M,L),  _(M,R),
-  /* AAF0 */  _(x,x),  _(x,x),  _(x,x),  _(x,x),  _(x,x), _(Vs,R), _(IS,x),  _(x,x),
-
-#define indic_offset_0xabc0u 3336
-
-
-  /* Meetei Mayek */
-
-  /* ABC0 */  _(C,x),  _(C,x),  _(C,x),  _(C,x),  _(C,x),  _(C,x),  _(C,x),  _(C,x),
-  /* ABC8 */  _(C,x),  _(C,x),  _(C,x),  _(C,x),  _(C,x),  _(C,x), _(VI,x), _(VI,x),
-  /* ABD0 */  _(C,x), _(VI,x),  _(C,x),  _(C,x),  _(C,x),  _(C,x),  _(C,x),  _(C,x),
-  /* ABD8 */  _(C,x),  _(C,x),  _(C,x), _(CF,x), _(CF,x), _(CF,x), _(CF,x), _(CF,x),
-  /* ABE0 */ _(CF,x), _(CF,x), _(CF,x),  _(M,R),  _(M,R),  _(M,T),  _(M,R),  _(M,R),
-  /* ABE8 */  _(M,B),  _(M,R),  _(M,R),  _(x,x), _(TM,R), _(PK,B),  _(x,x),  _(x,x),
-  /* ABF0 */ _(Nd,x), _(Nd,x), _(Nd,x), _(Nd,x), _(Nd,x), _(Nd,x), _(Nd,x), _(Nd,x),
-  /* ABF8 */ _(Nd,x), _(Nd,x),  _(x,x),  _(x,x),  _(x,x),  _(x,x),  _(x,x),  _(x,x),
-
-#define indic_offset_0x10a00u 3400
-
-
-  /* Kharoshthi */
-
-  /* 10A00 */  _(C,x),  _(M,O),  _(M,B),  _(M,B),  _(x,x),  _(M,T),  _(M,O),  _(x,x),
-  /* 10A08 */  _(x,x),  _(x,x),  _(x,x),  _(x,x),  _(M,B),  _(M,B), _(Bi,B), _(Vs,T),
-  /* 10A10 */  _(C,x),  _(C,x),  _(C,x),  _(C,x),  _(x,x),  _(C,x),  _(C,x),  _(C,x),
-  /* 10A18 */  _(x,x),  _(C,x),  _(C,x),  _(C,x),  _(C,x),  _(C,x),  _(C,x),  _(C,x),
-  /* 10A20 */  _(C,x),  _(C,x),  _(C,x),  _(C,x),  _(C,x),  _(C,x),  _(C,x),  _(C,x),
-  /* 10A28 */  _(C,x),  _(C,x),  _(C,x),  _(C,x),  _(C,x),  _(C,x),  _(C,x),  _(C,x),
-  /* 10A30 */  _(C,x),  _(C,x),  _(C,x),  _(C,x),  _(x,x),  _(x,x),  _(x,x),  _(x,x),
-  /* 10A38 */  _(N,T),  _(N,B),  _(N,B),  _(x,x),  _(x,x),  _(x,x),  _(x,x), _(IS,x),
-  /* 10A40 */ _(Nd,x), _(Nd,x), _(Nd,x), _(Nd,x), _(Nd,x), _(Nd,x), _(Nd,x), _(Nd,x),
-
-#define indic_offset_0x11000u 3472
-
-
-  /* Brahmi */
-
-  /* 11000 */ _(Bi,R), _(Bi,T), _(Vs,R),_(CWS,x),_(CWS,x), _(VI,x), _(VI,x), _(VI,x),
-  /* 11008 */ _(VI,x), _(VI,x), _(VI,x), _(VI,x), _(VI,x), _(VI,x), _(VI,x), _(VI,x),
-  /* 11010 */ _(VI,x), _(VI,x), _(VI,x),  _(C,x),  _(C,x),  _(C,x),  _(C,x),  _(C,x),
-  /* 11018 */  _(C,x),  _(C,x),  _(C,x),  _(C,x),  _(C,x),  _(C,x),  _(C,x),  _(C,x),
-  /* 11020 */  _(C,x),  _(C,x),  _(C,x),  _(C,x),  _(C,x),  _(C,x),  _(C,x),  _(C,x),
-  /* 11028 */  _(C,x),  _(C,x),  _(C,x),  _(C,x),  _(C,x),  _(C,x),  _(C,x),  _(C,x),
-  /* 11030 */  _(C,x),  _(C,x),  _(C,x),  _(C,x),  _(C,x),  _(C,x),  _(C,x),  _(C,x),
-  /* 11038 */  _(M,T),  _(M,T),  _(M,T),  _(M,T),  _(M,B),  _(M,B),  _(M,B),  _(M,B),
-  /* 11040 */  _(M,B),  _(M,B),  _(M,T),  _(M,T),  _(M,T),  _(M,T),  _(V,T),  _(x,x),
-  /* 11048 */  _(x,x),  _(x,x),  _(x,x),  _(x,x),  _(x,x),  _(x,x),  _(x,x),  _(x,x),
-  /* 11050 */  _(x,x),  _(x,x),_(BJN,x),_(BJN,x),_(BJN,x),_(BJN,x),_(BJN,x),_(BJN,x),
-  /* 11058 */_(BJN,x),_(BJN,x),_(BJN,x),_(BJN,x),_(BJN,x),_(BJN,x),_(BJN,x),_(BJN,x),
-  /* 11060 */_(BJN,x),_(BJN,x),_(BJN,x),_(BJN,x),_(BJN,x),_(BJN,x), _(Nd,x), _(Nd,x),
-  /* 11068 */ _(Nd,x), _(Nd,x), _(Nd,x), _(Nd,x), _(Nd,x), _(Nd,x), _(Nd,x), _(Nd,x),
-  /* 11070 */  _(x,x),  _(x,x),  _(x,x),  _(x,x),  _(x,x),  _(x,x),  _(x,x),  _(x,x),
-  /* 11078 */  _(x,x),  _(x,x),  _(x,x),  _(x,x),  _(x,x),  _(x,x),  _(x,x), _(NJ,x),
-
-  /* Kaithi */
-
-  /* 11080 */ _(Bi,T), _(Bi,T), _(Vs,R), _(VI,x), _(VI,x), _(VI,x), _(VI,x), _(VI,x),
-  /* 11088 */ _(VI,x), _(VI,x), _(VI,x), _(VI,x), _(VI,x),  _(C,x),  _(C,x),  _(C,x),
-  /* 11090 */  _(C,x),  _(C,x),  _(C,x),  _(C,x),  _(C,x),  _(C,x),  _(C,x),  _(C,x),
-  /* 11098 */  _(C,x),  _(C,x),  _(C,x),  _(C,x),  _(C,x),  _(C,x),  _(C,x),  _(C,x),
-  /* 110A0 */  _(C,x),  _(C,x),  _(C,x),  _(C,x),  _(C,x),  _(C,x),  _(C,x),  _(C,x),
-  /* 110A8 */  _(C,x),  _(C,x),  _(C,x),  _(C,x),  _(C,x),  _(C,x),  _(C,x),  _(C,x),
-  /* 110B0 */  _(M,R),  _(M,L),  _(M,R),  _(M,B),  _(M,B),  _(M,T),  _(M,T),  _(M,R),
-  /* 110B8 */  _(M,R),  _(V,B),  _(N,B),  _(x,x),  _(x,x),  _(x,x),  _(x,x),  _(x,x),
-
-#define indic_offset_0x11100u 3664
-
-
-  /* Chakma */
-
-  /* 11100 */ _(Bi,T), _(Bi,T), _(Vs,T), _(VI,x), _(VI,x), _(VI,x), _(VI,x),  _(C,x),
-  /* 11108 */  _(C,x),  _(C,x),  _(C,x),  _(C,x),  _(C,x),  _(C,x),  _(C,x),  _(C,x),
-  /* 11110 */  _(C,x),  _(C,x),  _(C,x),  _(C,x),  _(C,x),  _(C,x),  _(C,x),  _(C,x),
-  /* 11118 */  _(C,x),  _(C,x),  _(C,x),  _(C,x),  _(C,x),  _(C,x),  _(C,x),  _(C,x),
-  /* 11120 */  _(C,x),  _(C,x),  _(C,x),  _(C,x),  _(C,x),  _(C,x),  _(C,x),  _(M,T),
-  /* 11128 */  _(M,T),  _(M,T),  _(M,B),  _(M,B),  _(M,L),  _(M,T), _(M,TB), _(M,TB),
-  /* 11130 */  _(M,T),  _(M,B),  _(M,B), _(IS,x), _(PK,T),  _(x,x), _(Nd,x), _(Nd,x),
-  /* 11138 */ _(Nd,x), _(Nd,x), _(Nd,x), _(Nd,x), _(Nd,x), _(Nd,x), _(Nd,x), _(Nd,x),
-  /* 11140 */  _(x,x),  _(x,x),  _(x,x),  _(x,x),  _(x,x),  _(x,x),  _(x,x),  _(x,x),
-  /* 11148 */  _(x,x),  _(x,x),  _(x,x),  _(x,x),  _(x,x),  _(x,x),  _(x,x),  _(x,x),
-
-  /* Mahajani */
-
-  /* 11150 */ _(Vo,x), _(Vo,x), _(Vo,x), _(Vo,x), _(Vo,x),  _(C,x),  _(C,x),  _(C,x),
-  /* 11158 */  _(C,x),  _(C,x),  _(C,x),  _(C,x),  _(C,x),  _(C,x),  _(C,x),  _(C,x),
-  /* 11160 */  _(C,x),  _(C,x),  _(C,x),  _(C,x),  _(C,x),  _(C,x),  _(C,x),  _(C,x),
-  /* 11168 */  _(C,x),  _(C,x),  _(C,x),  _(C,x),  _(C,x),  _(C,x),  _(C,x),  _(C,x),
-  /* 11170 */  _(C,x),  _(C,x),  _(C,x),  _(N,B),  _(x,x),  _(x,x),  _(x,x),  _(x,x),
-  /* 11178 */  _(x,x),  _(x,x),  _(x,x),  _(x,x),  _(x,x),  _(x,x),  _(x,x),  _(x,x),
-
-  /* Sharada */
-
-  /* 11180 */ _(Bi,T), _(Bi,T), _(Vs,R), _(VI,x), _(VI,x), _(VI,x), _(VI,x), _(VI,x),
-  /* 11188 */ _(VI,x), _(VI,x), _(VI,x), _(VI,x), _(VI,x), _(VI,x), _(VI,x), _(VI,x),
-  /* 11190 */ _(VI,x),  _(C,x),  _(C,x),  _(C,x),  _(C,x),  _(C,x),  _(C,x),  _(C,x),
-  /* 11198 */  _(C,x),  _(C,x),  _(C,x),  _(C,x),  _(C,x),  _(C,x),  _(C,x),  _(C,x),
-  /* 111A0 */  _(C,x),  _(C,x),  _(C,x),  _(C,x),  _(C,x),  _(C,x),  _(C,x),  _(C,x),
-  /* 111A8 */  _(C,x),  _(C,x),  _(C,x),  _(C,x),  _(C,x),  _(C,x),  _(C,x),  _(C,x),
-  /* 111B0 */  _(C,x),  _(C,x),  _(C,x),  _(M,R),  _(M,L),  _(M,R),  _(M,B),  _(M,B),
-  /* 111B8 */  _(M,B),  _(M,B),  _(M,B),  _(M,B),  _(M,T),  _(M,T),  _(M,T), _(M,TR),
-  /* 111C0 */  _(V,R),  _(A,x),_(CPrf,x),_(CPrf,x),  _(x,x),  _(x,x),  _(x,x),  _(x,x),
-  /* 111C8 */  _(x,x),  _(x,x),  _(N,x),  _(M,T),  _(M,B),  _(x,x),  _(x,x),  _(x,x),
-  /* 111D0 */ _(Nd,x), _(Nd,x), _(Nd,x), _(Nd,x), _(Nd,x), _(Nd,x), _(Nd,x), _(Nd,x),
-  /* 111D8 */ _(Nd,x), _(Nd,x),  _(x,x),  _(x,x),  _(x,x),  _(x,x),  _(x,x),  _(x,x),
-
-  /* Sinhala Archaic Numbers */
-
-  /* 111E0 */  _(x,x), _(Nd,x), _(Nd,x), _(Nd,x), _(Nd,x), _(Nd,x), _(Nd,x), _(Nd,x),
-  /* 111E8 */ _(Nd,x), _(Nd,x), _(Nd,x), _(Nd,x), _(Nd,x), _(Nd,x), _(Nd,x), _(Nd,x),
-  /* 111F0 */ _(Nd,x), _(Nd,x), _(Nd,x), _(Nd,x), _(Nd,x),  _(x,x),  _(x,x),  _(x,x),
-  /* 111F8 */  _(x,x),  _(x,x),  _(x,x),  _(x,x),  _(x,x),  _(x,x),  _(x,x),  _(x,x),
-
-  /* Khojki */
-
-  /* 11200 */ _(VI,x), _(VI,x), _(VI,x), _(VI,x), _(VI,x), _(VI,x), _(VI,x), _(VI,x),
-  /* 11208 */  _(C,x),  _(C,x),  _(C,x),  _(C,x),  _(C,x),  _(C,x),  _(C,x),  _(C,x),
-  /* 11210 */  _(C,x),  _(C,x),  _(x,x),  _(C,x),  _(C,x),  _(C,x),  _(C,x),  _(C,x),
-  /* 11218 */  _(C,x),  _(C,x),  _(C,x),  _(C,x),  _(C,x),  _(C,x),  _(C,x),  _(C,x),
-  /* 11220 */  _(C,x),  _(C,x),  _(C,x),  _(C,x),  _(C,x),  _(C,x),  _(C,x),  _(C,x),
-  /* 11228 */  _(C,x),  _(C,x),  _(C,x),  _(C,x),  _(M,R),  _(M,R),  _(M,R),  _(M,B),
-  /* 11230 */  _(M,T),  _(M,T), _(M,TR), _(M,TR), _(Bi,T),  _(V,R),  _(N,T), _(GM,T),
-
-#define indic_offset_0x11280u 3976
-
-
-  /* Multani */
-
-  /* 11280 */ _(VI,x), _(VI,x), _(VI,x), _(VI,x),  _(C,x),  _(C,x),  _(C,x),  _(x,x),
-  /* 11288 */  _(C,x),  _(x,x),  _(C,x),  _(C,x),  _(C,x),  _(C,x),  _(x,x),  _(C,x),
-  /* 11290 */  _(C,x),  _(C,x),  _(C,x),  _(C,x),  _(C,x),  _(C,x),  _(C,x),  _(C,x),
-  /* 11298 */  _(C,x),  _(C,x),  _(C,x),  _(C,x),  _(C,x),  _(C,x),  _(x,x),  _(C,x),
-  /* 112A0 */  _(C,x),  _(C,x),  _(C,x),  _(C,x),  _(C,x),  _(C,x),  _(C,x),  _(C,x),
-  /* 112A8 */  _(C,x),  _(x,x),  _(x,x),  _(x,x),  _(x,x),  _(x,x),  _(x,x),  _(x,x),
-
-  /* Khudawadi */
-
-  /* 112B0 */ _(VI,x), _(VI,x), _(VI,x), _(VI,x), _(VI,x), _(VI,x), _(VI,x), _(VI,x),
-  /* 112B8 */ _(VI,x), _(VI,x),  _(C,x),  _(C,x),  _(C,x),  _(C,x),  _(C,x),  _(C,x),
-  /* 112C0 */  _(C,x),  _(C,x),  _(C,x),  _(C,x),  _(C,x),  _(C,x),  _(C,x),  _(C,x),
-  /* 112C8 */  _(C,x),  _(C,x),  _(C,x),  _(C,x),  _(C,x),  _(C,x),  _(C,x),  _(C,x),
-  /* 112D0 */  _(C,x),  _(C,x),  _(C,x),  _(C,x),  _(C,x),  _(C,x),  _(C,x),  _(C,x),
-  /* 112D8 */  _(C,x),  _(C,x),  _(C,x),  _(C,x),  _(C,x),  _(C,x),  _(C,x), _(Bi,T),
-  /* 112E0 */  _(M,R),  _(M,L),  _(M,R),  _(M,B),  _(M,B),  _(M,T),  _(M,T),  _(M,T),
-  /* 112E8 */  _(M,T),  _(N,B), _(PK,B),  _(x,x),  _(x,x),  _(x,x),  _(x,x),  _(x,x),
-  /* 112F0 */ _(Nd,x), _(Nd,x), _(Nd,x), _(Nd,x), _(Nd,x), _(Nd,x), _(Nd,x), _(Nd,x),
-  /* 112F8 */ _(Nd,x), _(Nd,x),  _(x,x),  _(x,x),  _(x,x),  _(x,x),  _(x,x),  _(x,x),
-
-  /* Grantha */
-
-  /* 11300 */ _(Bi,x), _(Bi,T), _(Bi,R), _(Vs,R),  _(x,x), _(VI,x), _(VI,x), _(VI,x),
-  /* 11308 */ _(VI,x), _(VI,x), _(VI,x), _(VI,x), _(VI,x),  _(x,x),  _(x,x), _(VI,x),
-  /* 11310 */ _(VI,x),  _(x,x),  _(x,x), _(VI,x), _(VI,x),  _(C,x),  _(C,x),  _(C,x),
-  /* 11318 */  _(C,x),  _(C,x),  _(C,x),  _(C,x),  _(C,x),  _(C,x),  _(C,x),  _(C,x),
-  /* 11320 */  _(C,x),  _(C,x),  _(C,x),  _(C,x),  _(C,x),  _(C,x),  _(C,x),  _(C,x),
-  /* 11328 */  _(C,x),  _(x,x),  _(C,x),  _(C,x),  _(C,x),  _(C,x),  _(C,x),  _(C,x),
-  /* 11330 */  _(C,x),  _(x,x),  _(C,x),  _(C,x),  _(x,x),  _(C,x),  _(C,x),  _(C,x),
-  /* 11338 */  _(C,x),  _(C,x),  _(x,x),  _(x,x),  _(N,x),  _(A,x),  _(M,R),  _(M,R),
-  /* 11340 */  _(M,T),  _(M,R),  _(M,R),  _(M,R),  _(M,R),  _(x,x),  _(x,x),  _(M,L),
-  /* 11348 */  _(M,L),  _(x,x),  _(x,x), _(M,LR), _(M,LR),  _(V,R),  _(x,x),  _(x,x),
-  /* 11350 */  _(x,x),  _(x,x),  _(x,x),  _(x,x),  _(x,x),  _(x,x),  _(x,x),  _(M,R),
-  /* 11358 */  _(x,x),  _(x,x),  _(x,x),  _(x,x),  _(x,x),  _(x,x),  _(x,x),  _(x,x),
-  /* 11360 */ _(VI,x), _(VI,x),  _(M,R),  _(M,R),  _(x,x),  _(x,x), _(Ca,T), _(Ca,T),
-  /* 11368 */ _(Ca,T), _(Ca,T), _(Ca,T), _(Ca,T), _(Ca,T),  _(x,x),  _(x,x),  _(x,x),
-  /* 11370 */ _(Ca,T), _(Ca,T), _(Ca,T), _(Ca,T), _(Ca,T),  _(x,x),  _(x,x),  _(x,x),
-
-#define indic_offset_0x11480u 4224
-
-
-  /* Tirhuta */
-
-  /* 11480 */  _(x,x), _(VI,x), _(VI,x), _(VI,x), _(VI,x), _(VI,x), _(VI,x), _(VI,x),
-  /* 11488 */ _(VI,x), _(VI,x), _(VI,x), _(VI,x), _(VI,x), _(VI,x), _(VI,x),  _(C,x),
-  /* 11490 */  _(C,x),  _(C,x),  _(C,x),  _(C,x),  _(C,x),  _(C,x),  _(C,x),  _(C,x),
-  /* 11498 */  _(C,x),  _(C,x),  _(C,x),  _(C,x),  _(C,x),  _(C,x),  _(C,x),  _(C,x),
-  /* 114A0 */  _(C,x),  _(C,x),  _(C,x),  _(C,x),  _(C,x),  _(C,x),  _(C,x),  _(C,x),
-  /* 114A8 */  _(C,x),  _(C,x),  _(C,x),  _(C,x),  _(C,x),  _(C,x),  _(C,x),  _(C,x),
-  /* 114B0 */  _(M,R),  _(M,L),  _(M,R),  _(M,B),  _(M,B),  _(M,B),  _(M,B),  _(M,B),
-  /* 114B8 */  _(M,B),  _(M,L),  _(M,T), _(M,TL), _(M,LR),  _(M,R), _(M,LR), _(Bi,T),
-  /* 114C0 */ _(Bi,T), _(Vs,R),  _(V,B),  _(N,B),  _(A,x),  _(x,x),  _(x,x),  _(x,x),
-  /* 114C8 */  _(x,x),  _(x,x),  _(x,x),  _(x,x),  _(x,x),  _(x,x),  _(x,x),  _(x,x),
-  /* 114D0 */ _(Nd,x), _(Nd,x), _(Nd,x), _(Nd,x), _(Nd,x), _(Nd,x), _(Nd,x), _(Nd,x),
-  /* 114D8 */ _(Nd,x), _(Nd,x),  _(x,x),  _(x,x),  _(x,x),  _(x,x),  _(x,x),  _(x,x),
-
-#define indic_offset_0x11580u 4320
-
-
-  /* Siddham */
-
-  /* 11580 */ _(VI,x), _(VI,x), _(VI,x), _(VI,x), _(VI,x), _(VI,x), _(VI,x), _(VI,x),
-  /* 11588 */ _(VI,x), _(VI,x), _(VI,x), _(VI,x), _(VI,x), _(VI,x),  _(C,x),  _(C,x),
-  /* 11590 */  _(C,x),  _(C,x),  _(C,x),  _(C,x),  _(C,x),  _(C,x),  _(C,x),  _(C,x),
-  /* 11598 */  _(C,x),  _(C,x),  _(C,x),  _(C,x),  _(C,x),  _(C,x),  _(C,x),  _(C,x),
-  /* 115A0 */  _(C,x),  _(C,x),  _(C,x),  _(C,x),  _(C,x),  _(C,x),  _(C,x),  _(C,x),
-  /* 115A8 */  _(C,x),  _(C,x),  _(C,x),  _(C,x),  _(C,x),  _(C,x),  _(C,x),  _(M,R),
-  /* 115B0 */  _(M,L),  _(M,R),  _(M,B),  _(M,B),  _(M,B),  _(M,B),  _(x,x),  _(x,x),
-  /* 115B8 */  _(M,L), _(M,TL), _(M,LR),_(M,TLR), _(Bi,T), _(Bi,T), _(Vs,R),  _(V,B),
-  /* 115C0 */  _(N,B),  _(x,x),  _(x,x),  _(x,x),  _(x,x),  _(x,x),  _(x,x),  _(x,x),
-  /* 115C8 */  _(x,x),  _(x,x),  _(x,x),  _(x,x),  _(x,x),  _(x,x),  _(x,x),  _(x,x),
-  /* 115D0 */  _(x,x),  _(x,x),  _(x,x),  _(x,x),  _(x,x),  _(x,x),  _(x,x),  _(x,x),
-  /* 115D8 */ _(VI,x), _(VI,x), _(VI,x), _(VI,x),  _(M,B),  _(M,B),  _(x,x),  _(x,x),
-  /* 115E0 */  _(x,x),  _(x,x),  _(x,x),  _(x,x),  _(x,x),  _(x,x),  _(x,x),  _(x,x),
-  /* 115E8 */  _(x,x),  _(x,x),  _(x,x),  _(x,x),  _(x,x),  _(x,x),  _(x,x),  _(x,x),
-  /* 115F0 */  _(x,x),  _(x,x),  _(x,x),  _(x,x),  _(x,x),  _(x,x),  _(x,x),  _(x,x),
-  /* 115F8 */  _(x,x),  _(x,x),  _(x,x),  _(x,x),  _(x,x),  _(x,x),  _(x,x),  _(x,x),
-
-  /* Modi */
-
-  /* 11600 */ _(VI,x), _(VI,x), _(VI,x), _(VI,x), _(VI,x), _(VI,x), _(VI,x), _(VI,x),
-  /* 11608 */ _(VI,x), _(VI,x), _(VI,x), _(VI,x), _(VI,x), _(VI,x),  _(C,x),  _(C,x),
-  /* 11610 */  _(C,x),  _(C,x),  _(C,x),  _(C,x),  _(C,x),  _(C,x),  _(C,x),  _(C,x),
-  /* 11618 */  _(C,x),  _(C,x),  _(C,x),  _(C,x),  _(C,x),  _(C,x),  _(C,x),  _(C,x),
-  /* 11620 */  _(C,x),  _(C,x),  _(C,x),  _(C,x),  _(C,x),  _(C,x),  _(C,x),  _(C,x),
-  /* 11628 */  _(C,x),  _(C,x),  _(C,x),  _(C,x),  _(C,x),  _(C,x),  _(C,x),  _(C,x),
-  /* 11630 */  _(M,R),  _(M,R),  _(M,R),  _(M,B),  _(M,B),  _(M,B),  _(M,B),  _(M,B),
-  /* 11638 */  _(M,B),  _(M,T),  _(M,T),  _(M,R),  _(M,R), _(Bi,T), _(Vs,R),  _(V,B),
-  /* 11640 */  _(M,T),  _(x,x),  _(x,x),  _(x,x),  _(x,x),  _(x,x),  _(x,x),  _(x,x),
-  /* 11648 */  _(x,x),  _(x,x),  _(x,x),  _(x,x),  _(x,x),  _(x,x),  _(x,x),  _(x,x),
-  /* 11650 */ _(Nd,x), _(Nd,x), _(Nd,x), _(Nd,x), _(Nd,x), _(Nd,x), _(Nd,x), _(Nd,x),
-  /* 11658 */ _(Nd,x), _(Nd,x),  _(x,x),  _(x,x),  _(x,x),  _(x,x),  _(x,x),  _(x,x),
-  /* 11660 */  _(x,x),  _(x,x),  _(x,x),  _(x,x),  _(x,x),  _(x,x),  _(x,x),  _(x,x),
-  /* 11668 */  _(x,x),  _(x,x),  _(x,x),  _(x,x),  _(x,x),  _(x,x),  _(x,x),  _(x,x),
-  /* 11670 */  _(x,x),  _(x,x),  _(x,x),  _(x,x),  _(x,x),  _(x,x),  _(x,x),  _(x,x),
-  /* 11678 */  _(x,x),  _(x,x),  _(x,x),  _(x,x),  _(x,x),  _(x,x),  _(x,x),  _(x,x),
-
-  /* Takri */
-
-  /* 11680 */ _(VI,x), _(VI,x), _(VI,x), _(VI,x), _(VI,x), _(VI,x), _(VI,x), _(VI,x),
-  /* 11688 */ _(VI,x), _(VI,x),  _(C,x),  _(C,x),  _(C,x),  _(C,x),  _(C,x),  _(C,x),
-  /* 11690 */  _(C,x),  _(C,x),  _(C,x),  _(C,x),  _(C,x),  _(C,x),  _(C,x),  _(C,x),
-  /* 11698 */  _(C,x),  _(C,x),  _(C,x),  _(C,x),  _(C,x),  _(C,x),  _(C,x),  _(C,x),
-  /* 116A0 */  _(C,x),  _(C,x),  _(C,x),  _(C,x),  _(C,x),  _(C,x),  _(C,x),  _(C,x),
-  /* 116A8 */  _(C,x),  _(C,x),  _(C,x), _(Bi,T), _(Vs,R),  _(M,T),  _(M,L),  _(M,R),
-  /* 116B0 */  _(M,B),  _(M,B),  _(M,T),  _(M,T),  _(M,T),  _(M,T),  _(V,R),  _(N,B),
-  /* 116B8 */  _(x,x),  _(x,x),  _(x,x),  _(x,x),  _(x,x),  _(x,x),  _(x,x),  _(x,x),
-  /* 116C0 */ _(Nd,x), _(Nd,x), _(Nd,x), _(Nd,x), _(Nd,x), _(Nd,x), _(Nd,x), _(Nd,x),
-  /* 116C8 */ _(Nd,x), _(Nd,x),  _(x,x),  _(x,x),  _(x,x),  _(x,x),  _(x,x),  _(x,x),
-  /* 116D0 */  _(x,x),  _(x,x),  _(x,x),  _(x,x),  _(x,x),  _(x,x),  _(x,x),  _(x,x),
-  /* 116D8 */  _(x,x),  _(x,x),  _(x,x),  _(x,x),  _(x,x),  _(x,x),  _(x,x),  _(x,x),
-  /* 116E0 */  _(x,x),  _(x,x),  _(x,x),  _(x,x),  _(x,x),  _(x,x),  _(x,x),  _(x,x),
-  /* 116E8 */  _(x,x),  _(x,x),  _(x,x),  _(x,x),  _(x,x),  _(x,x),  _(x,x),  _(x,x),
-  /* 116F0 */  _(x,x),  _(x,x),  _(x,x),  _(x,x),  _(x,x),  _(x,x),  _(x,x),  _(x,x),
-  /* 116F8 */  _(x,x),  _(x,x),  _(x,x),  _(x,x),  _(x,x),  _(x,x),  _(x,x),  _(x,x),
-
-  /* Ahom */
-
-  /* 11700 */  _(C,x),  _(C,x),  _(C,x),  _(C,x),  _(C,x),  _(C,x),  _(C,x),  _(C,x),
-  /* 11708 */  _(C,x),  _(C,x),  _(C,x),  _(C,x),  _(C,x),  _(C,x),  _(C,x),  _(C,x),
-  /* 11710 */  _(C,x),  _(C,x),  _(C,x),  _(C,x),  _(C,x),  _(C,x),  _(C,x),  _(C,x),
-  /* 11718 */  _(C,x),  _(C,x),  _(x,x),  _(x,x),  _(x,x), _(CM,B), _(CM,x), _(CM,T),
-  /* 11720 */  _(M,R),  _(M,R),  _(M,T),  _(M,T),  _(M,B),  _(M,B),  _(M,L),  _(M,T),
-  /* 11728 */  _(M,B),  _(M,T),  _(M,T), _(PK,T),  _(x,x),  _(x,x),  _(x,x),  _(x,x),
-  /* 11730 */ _(Nd,x), _(Nd,x), _(Nd,x), _(Nd,x), _(Nd,x), _(Nd,x), _(Nd,x), _(Nd,x),
-  /* 11738 */ _(Nd,x), _(Nd,x), _(Nd,x), _(Nd,x),  _(x,x),  _(x,x),  _(x,x),  _(x,x),
-
-}; /* Table items: 4768; occupancy: 72% */
-
 INDIC_TABLE_ELEMENT_TYPE
 hb_indic_get_categories (hb_codepoint_t u)
 {
@@ -917,9 +406,7 @@
 
     case 0x1u:
       if (hb_in_range (u, 0x1000u, 0x109Fu)) return indic_table[u - 0x1000u + indic_offset_0x1000u];
-      if (hb_in_range (u, 0x1700u, 0x17EFu)) return indic_table[u - 0x1700u + indic_offset_0x1700u];
-      if (hb_in_range (u, 0x1900u, 0x1A9Fu)) return indic_table[u - 0x1900u + indic_offset_0x1900u];
-      if (hb_in_range (u, 0x1B00u, 0x1C4Fu)) return indic_table[u - 0x1B00u + indic_offset_0x1b00u];
+      if (hb_in_range (u, 0x1780u, 0x17EFu)) return indic_table[u - 0x1780u + indic_offset_0x1780u];
       if (hb_in_range (u, 0x1CD0u, 0x1CFFu)) return indic_table[u - 0x1CD0u + indic_offset_0x1cd0u];
       break;
 
@@ -930,22 +417,11 @@
       break;
 
     case 0xAu:
-      if (hb_in_range (u, 0xA800u, 0xAAF7u)) return indic_table[u - 0xA800u + indic_offset_0xa800u];
-      if (hb_in_range (u, 0xABC0u, 0xABFFu)) return indic_table[u - 0xABC0u + indic_offset_0xabc0u];
+      if (hb_in_range (u, 0xA8E0u, 0xA8F7u)) return indic_table[u - 0xA8E0u + indic_offset_0xa8e0u];
+      if (hb_in_range (u, 0xA9E0u, 0xA9FFu)) return indic_table[u - 0xA9E0u + indic_offset_0xa9e0u];
+      if (hb_in_range (u, 0xAA60u, 0xAA7Fu)) return indic_table[u - 0xAA60u + indic_offset_0xaa60u];
       break;
 
-    case 0x10u:
-      if (hb_in_range (u, 0x10A00u, 0x10A47u)) return indic_table[u - 0x10A00u + indic_offset_0x10a00u];
-      break;
-
-    case 0x11u:
-      if (hb_in_range (u, 0x11000u, 0x110BFu)) return indic_table[u - 0x11000u + indic_offset_0x11000u];
-      if (hb_in_range (u, 0x11100u, 0x11237u)) return indic_table[u - 0x11100u + indic_offset_0x11100u];
-      if (hb_in_range (u, 0x11280u, 0x11377u)) return indic_table[u - 0x11280u + indic_offset_0x11280u];
-      if (hb_in_range (u, 0x11480u, 0x114DFu)) return indic_table[u - 0x11480u + indic_offset_0x11480u];
-      if (hb_in_range (u, 0x11580u, 0x1173Fu)) return indic_table[u - 0x11580u + indic_offset_0x11580u];
-      break;
-
     default:
       break;
   }

Modified: trunk/Build/source/libs/harfbuzz/harfbuzz-src/src/hb-ot-shape-complex-indic.cc
===================================================================
--- trunk/Build/source/libs/harfbuzz/harfbuzz-src/src/hb-ot-shape-complex-indic.cc	2016-07-21 23:20:53 UTC (rev 41747)
+++ trunk/Build/source/libs/harfbuzz/harfbuzz-src/src/hb-ot-shape-complex-indic.cc	2016-07-21 23:35:31 UTC (rev 41748)
@@ -200,18 +200,10 @@
     cat = OT_Symbol;
     ASSERT_STATIC ((int) INDIC_SYLLABIC_CATEGORY_AVAGRAHA == OT_Symbol);
   }
-  else if (unlikely (u == 0x17DDu)) /* https://github.com/roozbehp/unicode-data/issues/2 */
-  {
-    cat = OT_M;
-    pos = POS_ABOVE_C;
-  }
   else if (unlikely (u == 0x17C6u)) cat = OT_N; /* Khmer Bindu doesn't like to be repositioned. */
   else if (unlikely (hb_in_range (u, 0x2010u, 0x2011u)))
 				    cat = OT_PLACEHOLDER;
   else if (unlikely (u == 0x25CCu)) cat = OT_DOTTEDCIRCLE;
-  else if (unlikely (u == 0xA982u)) cat = OT_SM; /* Javanese repha. */
-  else if (unlikely (u == 0xA9BEu)) cat = OT_CM2; /* Javanese medial ya. */
-  else if (unlikely (u == 0xA9BDu)) { cat = OT_M; pos = POS_POST_C; } /* Javanese vocalic r. */
 
 
   /*
@@ -277,11 +269,6 @@
   BLWF_MODE_PRE_AND_POST, /* Below-forms feature applied to pre-base and post-base. */
   BLWF_MODE_POST_ONLY     /* Below-forms feature applied to post-base only. */
 };
-enum pref_len_t {
-  PREF_LEN_1 = 1,
-  PREF_LEN_2 = 2,
-  PREF_LEN_DONT_CARE = PREF_LEN_2
-};
 struct indic_config_t
 {
   hb_script_t     script;
@@ -291,26 +278,24 @@
   reph_position_t reph_pos;
   reph_mode_t     reph_mode;
   blwf_mode_t     blwf_mode;
-  pref_len_t      pref_len;
 };
 
 static const indic_config_t indic_configs[] =
 {
   /* Default.  Should be first. */
-  {HB_SCRIPT_INVALID,	false,      0,BASE_POS_LAST, REPH_POS_BEFORE_POST,REPH_MODE_IMPLICIT, BLWF_MODE_PRE_AND_POST, PREF_LEN_1},
-  {HB_SCRIPT_DEVANAGARI,true, 0x094Du,BASE_POS_LAST, REPH_POS_BEFORE_POST,REPH_MODE_IMPLICIT, BLWF_MODE_PRE_AND_POST, PREF_LEN_DONT_CARE},
-  {HB_SCRIPT_BENGALI,	true, 0x09CDu,BASE_POS_LAST, REPH_POS_AFTER_SUB,  REPH_MODE_IMPLICIT, BLWF_MODE_PRE_AND_POST, PREF_LEN_DONT_CARE},
-  {HB_SCRIPT_GURMUKHI,	true, 0x0A4Du,BASE_POS_LAST, REPH_POS_BEFORE_SUB, REPH_MODE_IMPLICIT, BLWF_MODE_PRE_AND_POST, PREF_LEN_DONT_CARE},
-  {HB_SCRIPT_GUJARATI,	true, 0x0ACDu,BASE_POS_LAST, REPH_POS_BEFORE_POST,REPH_MODE_IMPLICIT, BLWF_MODE_PRE_AND_POST, PREF_LEN_DONT_CARE},
-  {HB_SCRIPT_ORIYA,	true, 0x0B4Du,BASE_POS_LAST, REPH_POS_AFTER_MAIN, REPH_MODE_IMPLICIT, BLWF_MODE_PRE_AND_POST, PREF_LEN_DONT_CARE},
-  {HB_SCRIPT_TAMIL,	true, 0x0BCDu,BASE_POS_LAST, REPH_POS_AFTER_POST, REPH_MODE_IMPLICIT, BLWF_MODE_PRE_AND_POST, PREF_LEN_2},
-  {HB_SCRIPT_TELUGU,	true, 0x0C4Du,BASE_POS_LAST, REPH_POS_AFTER_POST, REPH_MODE_EXPLICIT, BLWF_MODE_POST_ONLY,    PREF_LEN_2},
-  {HB_SCRIPT_KANNADA,	true, 0x0CCDu,BASE_POS_LAST, REPH_POS_AFTER_POST, REPH_MODE_IMPLICIT, BLWF_MODE_POST_ONLY,    PREF_LEN_2},
-  {HB_SCRIPT_MALAYALAM,	true, 0x0D4Du,BASE_POS_LAST, REPH_POS_AFTER_MAIN, REPH_MODE_LOG_REPHA,BLWF_MODE_PRE_AND_POST, PREF_LEN_2},
+  {HB_SCRIPT_INVALID,	false,      0,BASE_POS_LAST, REPH_POS_BEFORE_POST,REPH_MODE_IMPLICIT, BLWF_MODE_PRE_AND_POST},
+  {HB_SCRIPT_DEVANAGARI,true, 0x094Du,BASE_POS_LAST, REPH_POS_BEFORE_POST,REPH_MODE_IMPLICIT, BLWF_MODE_PRE_AND_POST},
+  {HB_SCRIPT_BENGALI,	true, 0x09CDu,BASE_POS_LAST, REPH_POS_AFTER_SUB,  REPH_MODE_IMPLICIT, BLWF_MODE_PRE_AND_POST},
+  {HB_SCRIPT_GURMUKHI,	true, 0x0A4Du,BASE_POS_LAST, REPH_POS_BEFORE_SUB, REPH_MODE_IMPLICIT, BLWF_MODE_PRE_AND_POST},
+  {HB_SCRIPT_GUJARATI,	true, 0x0ACDu,BASE_POS_LAST, REPH_POS_BEFORE_POST,REPH_MODE_IMPLICIT, BLWF_MODE_PRE_AND_POST},
+  {HB_SCRIPT_ORIYA,	true, 0x0B4Du,BASE_POS_LAST, REPH_POS_AFTER_MAIN, REPH_MODE_IMPLICIT, BLWF_MODE_PRE_AND_POST},
+  {HB_SCRIPT_TAMIL,	true, 0x0BCDu,BASE_POS_LAST, REPH_POS_AFTER_POST, REPH_MODE_IMPLICIT, BLWF_MODE_PRE_AND_POST},
+  {HB_SCRIPT_TELUGU,	true, 0x0C4Du,BASE_POS_LAST, REPH_POS_AFTER_POST, REPH_MODE_EXPLICIT, BLWF_MODE_POST_ONLY},
+  {HB_SCRIPT_KANNADA,	true, 0x0CCDu,BASE_POS_LAST, REPH_POS_AFTER_POST, REPH_MODE_IMPLICIT, BLWF_MODE_POST_ONLY},
+  {HB_SCRIPT_MALAYALAM,	true, 0x0D4Du,BASE_POS_LAST, REPH_POS_AFTER_MAIN, REPH_MODE_LOG_REPHA,BLWF_MODE_PRE_AND_POST},
   {HB_SCRIPT_SINHALA,	false,0x0DCAu,BASE_POS_LAST_SINHALA,
-						     REPH_POS_AFTER_MAIN, REPH_MODE_EXPLICIT, BLWF_MODE_PRE_AND_POST, PREF_LEN_DONT_CARE},
-  {HB_SCRIPT_KHMER,	false,0x17D2u,BASE_POS_FIRST,REPH_POS_DONT_CARE,  REPH_MODE_VIS_REPHA,BLWF_MODE_PRE_AND_POST, PREF_LEN_2},
-  {HB_SCRIPT_JAVANESE,	false,0xA9C0u,BASE_POS_FIRST,REPH_POS_DONT_CARE,  REPH_MODE_VIS_REPHA,BLWF_MODE_PRE_AND_POST, PREF_LEN_1},
+						     REPH_POS_AFTER_MAIN, REPH_MODE_EXPLICIT, BLWF_MODE_PRE_AND_POST},
+  {HB_SCRIPT_KHMER,	false,0x17D2u,BASE_POS_FIRST,REPH_POS_DONT_CARE,  REPH_MODE_VIS_REPHA,BLWF_MODE_PRE_AND_POST},
 };
 
 
@@ -588,12 +573,8 @@
   if (indic_plan->pstf.would_substitute (glyphs  , 2, face) ||
       indic_plan->pstf.would_substitute (glyphs+1, 2, face))
     return POS_POST_C;
-  unsigned int pref_len = indic_plan->config->pref_len;
-  if ((pref_len == PREF_LEN_2 &&
-       (indic_plan->pref.would_substitute (glyphs  , 2, face) ||
-        indic_plan->pref.would_substitute (glyphs+1, 2, face)))
-   || (pref_len == PREF_LEN_1 &&
-       indic_plan->pref.would_substitute (glyphs+1, 1, face)))
+  if (indic_plan->pref.would_substitute (glyphs  , 2, face) ||
+      indic_plan->pref.would_substitute (glyphs+1, 2, face))
     return POS_POST_C;
   return POS_BASE_C;
 }
@@ -1099,10 +1080,9 @@
       }
   }
 
-  unsigned int pref_len = indic_plan->config->pref_len;
+  unsigned int pref_len = 2;
   if (indic_plan->mask_array[PREF] && base + pref_len < end)
   {
-    assert (1 <= pref_len && pref_len <= 2);
     /* Find a Halant,Ra sequence and mark it for pre-base reordering processing. */
     for (unsigned int i = base + 1; i + pref_len - 1 < end; i++) {
       hb_codepoint_t glyphs[2];
@@ -1312,7 +1292,7 @@
   for (base = start; base < end; base++)
     if (info[base].indic_position() >= POS_BASE_C)
     {
-      if (try_pref && base + 1 < end && indic_plan->config->pref_len == 2)
+      if (try_pref && base + 1 < end)
       {
 	for (unsigned int i = base + 1; i < end; i++)
 	  if ((info[i].mask & indic_plan->mask_array[PREF]) != 0)
@@ -1594,7 +1574,6 @@
 
   if (try_pref && base + 1 < end) /* Otherwise there can't be any pre-base reordering Ra. */
   {
-    unsigned int pref_len = indic_plan->config->pref_len;
     for (unsigned int i = base + 1; i < end; i++)
       if ((info[i].mask & indic_plan->mask_array[PREF]) != 0)
       {
@@ -1605,10 +1584,8 @@
         /* Note: We just check that something got substituted.  We don't check that
 	 * the <pref> feature actually did it...
 	 *
-	 * If pref len is longer than one, then only reorder if it ligated.  If
-	 * pref len is one, only reorder if it didn't ligate with other things. */
-	if (_hb_glyph_info_substituted (&info[i]) &&
-	    ((pref_len == 1) ^ _hb_glyph_info_ligated_and_didnt_multiply (&info[i])))
+	 * Reorder pref only if it ligated. */
+	if (_hb_glyph_info_ligated_and_didnt_multiply (&info[i]))
 	{
 	  /*
 	   *       2. Try to find a target position the same way as for pre-base matra.

Modified: trunk/Build/source/libs/harfbuzz/harfbuzz-src/src/hb-ot-shape-complex-myanmar-machine.hh
===================================================================
--- trunk/Build/source/libs/harfbuzz/harfbuzz-src/src/hb-ot-shape-complex-myanmar-machine.hh	2016-07-21 23:20:53 UTC (rev 41747)
+++ trunk/Build/source/libs/harfbuzz/harfbuzz-src/src/hb-ot-shape-complex-myanmar-machine.hh	2016-07-21 23:35:31 UTC (rev 41748)
@@ -1,5 +1,5 @@
 
-#line 1 "hb-ot-shape-complex-myanmar-machine.rl"
+#line 1 "../../src/hb-ot-shape-complex-myanmar-machine.rl"
 /*
  * Copyright © 2011,2012  Google, Inc.
  *
@@ -32,7 +32,7 @@
 #include "hb-private.hh"
 
 
-#line 36 "hb-ot-shape-complex-myanmar-machine.hh"
+#line 36 "../../src/hb-ot-shape-complex-myanmar-machine.hh.tmp"
 static const unsigned char _myanmar_syllable_machine_trans_keys[] = {
 	1u, 31u, 3u, 30u, 5u, 29u, 5u, 8u, 5u, 29u, 3u, 25u, 5u, 25u, 5u, 25u, 
 	3u, 29u, 3u, 29u, 3u, 29u, 3u, 29u, 1u, 16u, 3u, 29u, 3u, 29u, 3u, 29u, 
@@ -261,11 +261,11 @@
 static const int myanmar_syllable_machine_en_main = 0;
 
 
-#line 36 "hb-ot-shape-complex-myanmar-machine.rl"
+#line 36 "../../src/hb-ot-shape-complex-myanmar-machine.rl"
 
 
 
-#line 93 "hb-ot-shape-complex-myanmar-machine.rl"
+#line 93 "../../src/hb-ot-shape-complex-myanmar-machine.rl"
 
 
 #define found_syllable(syllable_type) \
@@ -285,7 +285,7 @@
   int cs;
   hb_glyph_info_t *info = buffer->info;
   
-#line 289 "hb-ot-shape-complex-myanmar-machine.hh"
+#line 289 "../../src/hb-ot-shape-complex-myanmar-machine.hh.tmp"
 	{
 	cs = myanmar_syllable_machine_start;
 	ts = 0;
@@ -293,7 +293,7 @@
 	act = 0;
 	}
 
-#line 114 "hb-ot-shape-complex-myanmar-machine.rl"
+#line 114 "../../src/hb-ot-shape-complex-myanmar-machine.rl"
 
 
   p = 0;
@@ -302,7 +302,7 @@
   unsigned int last = 0;
   unsigned int syllable_serial = 1;
   
-#line 306 "hb-ot-shape-complex-myanmar-machine.hh"
+#line 306 "../../src/hb-ot-shape-complex-myanmar-machine.hh.tmp"
 	{
 	int _slen;
 	int _trans;
@@ -316,7 +316,7 @@
 #line 1 "NONE"
 	{ts = p;}
 	break;
-#line 320 "hb-ot-shape-complex-myanmar-machine.hh"
+#line 320 "../../src/hb-ot-shape-complex-myanmar-machine.hh.tmp"
 	}
 
 	_keys = _myanmar_syllable_machine_trans_keys + (cs<<1);
@@ -335,38 +335,38 @@
 
 	switch ( _myanmar_syllable_machine_trans_actions[_trans] ) {
 	case 7:
-#line 85 "hb-ot-shape-complex-myanmar-machine.rl"
+#line 85 "../../src/hb-ot-shape-complex-myanmar-machine.rl"
 	{te = p+1;{ found_syllable (consonant_syllable); }}
 	break;
 	case 5:
-#line 86 "hb-ot-shape-complex-myanmar-machine.rl"
+#line 86 "../../src/hb-ot-shape-complex-myanmar-machine.rl"
 	{te = p+1;{ found_syllable (non_myanmar_cluster); }}
 	break;
 	case 10:
-#line 87 "hb-ot-shape-complex-myanmar-machine.rl"
+#line 87 "../../src/hb-ot-shape-complex-myanmar-machine.rl"
 	{te = p+1;{ found_syllable (punctuation_cluster); }}
 	break;
 	case 4:
-#line 88 "hb-ot-shape-complex-myanmar-machine.rl"
+#line 88 "../../src/hb-ot-shape-complex-myanmar-machine.rl"
 	{te = p+1;{ found_syllable (broken_cluster); }}
 	break;
 	case 3:
-#line 89 "hb-ot-shape-complex-myanmar-machine.rl"
+#line 89 "../../src/hb-ot-shape-complex-myanmar-machine.rl"
 	{te = p+1;{ found_syllable (non_myanmar_cluster); }}
 	break;
 	case 6:
-#line 85 "hb-ot-shape-complex-myanmar-machine.rl"
+#line 85 "../../src/hb-ot-shape-complex-myanmar-machine.rl"
 	{te = p;p--;{ found_syllable (consonant_syllable); }}
 	break;
 	case 8:
-#line 88 "hb-ot-shape-complex-myanmar-machine.rl"
+#line 88 "../../src/hb-ot-shape-complex-myanmar-machine.rl"
 	{te = p;p--;{ found_syllable (broken_cluster); }}
 	break;
 	case 9:
-#line 89 "hb-ot-shape-complex-myanmar-machine.rl"
+#line 89 "../../src/hb-ot-shape-complex-myanmar-machine.rl"
 	{te = p;p--;{ found_syllable (non_myanmar_cluster); }}
 	break;
-#line 370 "hb-ot-shape-complex-myanmar-machine.hh"
+#line 370 "../../src/hb-ot-shape-complex-myanmar-machine.hh.tmp"
 	}
 
 _again:
@@ -375,7 +375,7 @@
 #line 1 "NONE"
 	{ts = 0;}
 	break;
-#line 379 "hb-ot-shape-complex-myanmar-machine.hh"
+#line 379 "../../src/hb-ot-shape-complex-myanmar-machine.hh.tmp"
 	}
 
 	if ( ++p != pe )
@@ -391,7 +391,7 @@
 
 	}
 
-#line 123 "hb-ot-shape-complex-myanmar-machine.rl"
+#line 123 "../../src/hb-ot-shape-complex-myanmar-machine.rl"
 
 }
 

Modified: trunk/Build/source/libs/harfbuzz/harfbuzz-src/src/hb-ot-shape-complex-myanmar.cc
===================================================================
--- trunk/Build/source/libs/harfbuzz/harfbuzz-src/src/hb-ot-shape-complex-myanmar.cc	2016-07-21 23:20:53 UTC (rev 41747)
+++ trunk/Build/source/libs/harfbuzz/harfbuzz-src/src/hb-ot-shape-complex-myanmar.cc	2016-07-21 23:35:31 UTC (rev 41748)
@@ -249,6 +249,11 @@
     case 0x104Au: case 0x104Bu:
       cat = (indic_category_t) OT_P;
       break;
+
+    case 0xAA74u: case 0xAA75u: case 0xAA76u:
+      /* https://github.com/roozbehp/unicode-data/issues/3 */
+      cat = (indic_category_t) OT_C;
+      break;
   }
 
   if (cat == OT_M)

Modified: trunk/Build/source/libs/harfbuzz/harfbuzz-src/src/hb-ot-shape-complex-private.hh
===================================================================
--- trunk/Build/source/libs/harfbuzz/harfbuzz-src/src/hb-ot-shape-complex-private.hh	2016-07-21 23:20:53 UTC (rev 41747)
+++ trunk/Build/source/libs/harfbuzz/harfbuzz-src/src/hb-ot-shape-complex-private.hh	2016-07-21 23:35:31 UTC (rev 41748)
@@ -241,9 +241,6 @@
     /* Unicode-3.0 additions */
     case HB_SCRIPT_SINHALA:
 
-    /* Unicode-5.2 additions */
-    case HB_SCRIPT_JAVANESE:
-
       /* If the designer designed the font for the 'DFLT' script,
        * use the default shaper.  Otherwise, use the specific shaper.
        * Note that for some simple scripts, there may not be *any*
@@ -316,7 +313,7 @@
 
     /* Unicode-5.2 additions */
     case HB_SCRIPT_EGYPTIAN_HIEROGLYPHS:
-    //case HB_SCRIPT_JAVANESE:
+    case HB_SCRIPT_JAVANESE:
     case HB_SCRIPT_KAITHI:
     case HB_SCRIPT_MEETEI_MAYEK:
     case HB_SCRIPT_TAI_THAM:
@@ -345,6 +342,15 @@
     case HB_SCRIPT_SIDDHAM:
     case HB_SCRIPT_TIRHUTA:
 
+    /* Unicode-8.0 additions */
+    case HB_SCRIPT_AHOM:
+    //case HB_SCRIPT_MULTANI:
+
+    /* Unicode-9.0 additions */
+    case HB_SCRIPT_BHAIKSUKI:
+    case HB_SCRIPT_MARCHEN:
+    case HB_SCRIPT_NEWA:
+
       /* If the designer designed the font for the 'DFLT' script,
        * use the default shaper.  Otherwise, use the specific shaper.
        * Note that for some simple scripts, there may not be *any*

Modified: trunk/Build/source/libs/harfbuzz/harfbuzz-src/src/hb-ot-shape-complex-use-machine.hh
===================================================================
--- trunk/Build/source/libs/harfbuzz/harfbuzz-src/src/hb-ot-shape-complex-use-machine.hh	2016-07-21 23:20:53 UTC (rev 41747)
+++ trunk/Build/source/libs/harfbuzz/harfbuzz-src/src/hb-ot-shape-complex-use-machine.hh	2016-07-21 23:35:31 UTC (rev 41748)
@@ -36,328 +36,255 @@
 
 #line 38 "hb-ot-shape-complex-use-machine.hh"
 static const unsigned char _use_syllable_machine_trans_keys[] = {
-	0u, 0u, 4u, 4u, 1u, 1u, 0u, 39u, 21u, 21u, 8u, 39u, 8u, 39u, 1u, 1u, 
-	8u, 39u, 8u, 39u, 8u, 39u, 8u, 26u, 8u, 26u, 8u, 26u, 8u, 39u, 8u, 39u, 
-	8u, 39u, 8u, 39u, 8u, 39u, 8u, 39u, 8u, 39u, 8u, 39u, 8u, 39u, 8u, 39u, 
-	8u, 39u, 8u, 39u, 8u, 39u, 1u, 1u, 8u, 39u, 8u, 39u, 8u, 26u, 8u, 26u, 
+	1u, 1u, 0u, 39u, 21u, 21u, 8u, 39u, 8u, 39u, 1u, 1u, 8u, 39u, 8u, 39u, 
+	8u, 39u, 8u, 26u, 8u, 26u, 8u, 26u, 8u, 39u, 8u, 39u, 8u, 39u, 8u, 39u, 
+	8u, 39u, 8u, 39u, 8u, 39u, 8u, 39u, 8u, 39u, 8u, 39u, 8u, 39u, 13u, 21u, 
+	4u, 4u, 13u, 13u, 8u, 39u, 8u, 39u, 8u, 39u, 8u, 39u, 8u, 26u, 8u, 26u, 
 	8u, 26u, 8u, 39u, 8u, 39u, 8u, 39u, 8u, 39u, 8u, 39u, 8u, 39u, 8u, 39u, 
-	8u, 39u, 12u, 21u, 12u, 13u, 8u, 39u, 8u, 39u, 8u, 39u, 8u, 39u, 8u, 26u, 
-	8u, 26u, 8u, 26u, 8u, 39u, 8u, 39u, 8u, 39u, 8u, 39u, 8u, 39u, 8u, 39u, 
-	8u, 39u, 8u, 39u, 8u, 39u, 8u, 39u, 1u, 39u, 8u, 39u, 21u, 42u, 41u, 42u, 
+	8u, 39u, 8u, 39u, 8u, 39u, 1u, 1u, 1u, 39u, 8u, 39u, 21u, 42u, 41u, 42u, 
 	42u, 42u, 0
 };
 
 static const char _use_syllable_machine_key_spans[] = {
-	0, 1, 1, 40, 1, 32, 32, 1, 
-	32, 32, 32, 19, 19, 19, 32, 32, 
-	32, 32, 32, 32, 32, 32, 32, 32, 
-	32, 32, 32, 1, 32, 32, 19, 19, 
+	1, 40, 1, 32, 32, 1, 32, 32, 
+	32, 19, 19, 19, 32, 32, 32, 32, 
+	32, 32, 32, 32, 32, 32, 32, 9, 
+	1, 1, 32, 32, 32, 32, 19, 19, 
 	19, 32, 32, 32, 32, 32, 32, 32, 
-	32, 10, 2, 32, 32, 32, 32, 19, 
-	19, 19, 32, 32, 32, 32, 32, 32, 
-	32, 32, 32, 32, 39, 32, 22, 2, 
+	32, 32, 32, 1, 39, 32, 22, 2, 
 	1
 };
 
 static const short _use_syllable_machine_index_offsets[] = {
-	0, 0, 2, 4, 45, 47, 80, 113, 
-	115, 148, 181, 214, 234, 254, 274, 307, 
-	340, 373, 406, 439, 472, 505, 538, 571, 
-	604, 637, 670, 703, 705, 738, 771, 791, 
-	811, 831, 864, 897, 930, 963, 996, 1029, 
-	1062, 1095, 1106, 1109, 1142, 1175, 1208, 1241, 
-	1261, 1281, 1301, 1334, 1367, 1400, 1433, 1466, 
-	1499, 1532, 1565, 1598, 1631, 1671, 1704, 1727, 
-	1730
+	0, 2, 43, 45, 78, 111, 113, 146, 
+	179, 212, 232, 252, 272, 305, 338, 371, 
+	404, 437, 470, 503, 536, 569, 602, 635, 
+	645, 647, 649, 682, 715, 748, 781, 801, 
+	821, 841, 874, 907, 940, 973, 1006, 1039, 
+	1072, 1105, 1138, 1171, 1173, 1213, 1246, 1269, 
+	1272
 };
 
 static const char _use_syllable_machine_indicies[] = {
-	1, 0, 3, 2, 4, 5, 6, 
-	4, 1, 5, 8, 8, 7, 8, 8, 
-	3, 9, 8, 8, 8, 4, 4, 10, 
-	11, 8, 8, 12, 13, 14, 15, 16, 
-	17, 18, 12, 19, 20, 21, 22, 23, 
-	24, 8, 25, 26, 27, 8, 29, 28, 
-	31, 30, 30, 32, 33, 30, 30, 30, 
-	30, 30, 30, 30, 30, 34, 35, 36, 
-	37, 38, 39, 40, 41, 35, 42, 34, 
-	43, 44, 45, 46, 30, 47, 48, 49, 
-	30, 31, 30, 30, 32, 33, 30, 30, 
-	30, 30, 30, 30, 30, 30, 50, 35, 
-	36, 37, 38, 39, 40, 41, 35, 42, 
-	43, 43, 44, 45, 46, 30, 47, 48, 
-	49, 30, 32, 51, 31, 30, 30, 32, 
-	33, 30, 30, 30, 30, 30, 30, 30, 
-	30, 30, 35, 36, 37, 38, 39, 40, 
-	41, 35, 42, 43, 43, 44, 45, 46, 
-	30, 47, 48, 49, 30, 31, 30, 30, 
-	30, 30, 30, 30, 30, 30, 30, 30, 
-	30, 30, 30, 35, 36, 37, 38, 39, 
-	30, 30, 30, 30, 30, 30, 44, 45, 
-	46, 30, 47, 48, 49, 30, 31, 30, 
-	30, 30, 30, 30, 30, 30, 30, 30, 
-	30, 30, 30, 30, 30, 36, 37, 38, 
-	39, 30, 30, 30, 30, 30, 30, 30, 
-	30, 30, 30, 47, 48, 49, 30, 31, 
-	30, 30, 30, 30, 30, 30, 30, 30, 
-	30, 30, 30, 30, 30, 30, 30, 37, 
-	38, 39, 30, 31, 30, 30, 30, 30, 
-	30, 30, 30, 30, 30, 30, 30, 30, 
-	30, 30, 30, 30, 38, 39, 30, 31, 
-	30, 30, 30, 30, 30, 30, 30, 30, 
-	30, 30, 30, 30, 30, 30, 30, 30, 
-	30, 39, 30, 31, 30, 30, 30, 30, 
-	30, 30, 30, 30, 30, 30, 30, 30, 
-	30, 30, 30, 37, 38, 39, 30, 30, 
-	30, 30, 30, 30, 30, 30, 30, 30, 
-	47, 48, 49, 30, 31, 30, 30, 30, 
-	30, 30, 30, 30, 30, 30, 30, 30, 
-	30, 30, 30, 30, 37, 38, 39, 30, 
-	30, 30, 30, 30, 30, 30, 30, 30, 
-	30, 30, 48, 49, 30, 31, 30, 30, 
-	30, 30, 30, 30, 30, 30, 30, 30, 
-	30, 30, 30, 30, 30, 37, 38, 39, 
-	30, 30, 30, 30, 30, 30, 30, 30, 
-	30, 30, 30, 30, 49, 30, 31, 30, 
-	30, 30, 30, 30, 30, 30, 30, 30, 
-	30, 30, 30, 30, 30, 36, 37, 38, 
-	39, 30, 30, 30, 30, 30, 30, 44, 
-	45, 46, 30, 47, 48, 49, 30, 31, 
-	30, 30, 30, 30, 30, 30, 30, 30, 
-	30, 30, 30, 30, 30, 30, 36, 37, 
-	38, 39, 30, 30, 30, 30, 30, 30, 
-	30, 45, 46, 30, 47, 48, 49, 30, 
-	31, 30, 30, 30, 30, 30, 30, 30, 
-	30, 30, 30, 30, 30, 30, 30, 36, 
-	37, 38, 39, 30, 30, 30, 30, 30, 
-	30, 30, 30, 46, 30, 47, 48, 49, 
-	30, 31, 30, 30, 30, 30, 30, 30, 
-	30, 30, 30, 30, 30, 30, 30, 35, 
-	36, 37, 38, 39, 30, 41, 35, 30, 
-	30, 30, 44, 45, 46, 30, 47, 48, 
-	49, 30, 31, 30, 30, 30, 30, 30, 
-	30, 30, 30, 30, 30, 30, 30, 30, 
-	35, 36, 37, 38, 39, 30, 30, 35, 
-	30, 30, 30, 44, 45, 46, 30, 47, 
-	48, 49, 30, 31, 30, 30, 30, 30, 
-	30, 30, 30, 30, 30, 30, 30, 30, 
-	30, 35, 36, 37, 38, 39, 40, 41, 
-	35, 30, 30, 30, 44, 45, 46, 30, 
-	47, 48, 49, 30, 31, 30, 30, 32, 
-	33, 30, 30, 30, 30, 30, 30, 30, 
-	30, 30, 35, 36, 37, 38, 39, 40, 
-	41, 35, 42, 30, 43, 44, 45, 46, 
-	30, 47, 48, 49, 30, 31, 30, 30, 
-	32, 33, 30, 30, 30, 30, 30, 30, 
-	30, 30, 30, 35, 36, 37, 38, 39, 
-	40, 41, 35, 42, 34, 43, 44, 45, 
-	46, 30, 47, 48, 49, 30, 53, 52, 
-	52, 54, 55, 52, 52, 52, 52, 52, 
-	52, 52, 52, 56, 52, 57, 58, 59, 
-	60, 61, 62, 57, 63, 56, 64, 52, 
-	52, 52, 52, 65, 66, 67, 52, 53, 
-	52, 52, 54, 55, 52, 52, 52, 52, 
-	52, 52, 52, 52, 68, 52, 57, 58, 
-	59, 60, 61, 62, 57, 63, 64, 64, 
-	52, 52, 52, 52, 65, 66, 67, 52, 
-	54, 51, 53, 52, 52, 54, 55, 52, 
-	52, 52, 52, 52, 52, 52, 52, 52, 
-	52, 57, 58, 59, 60, 61, 62, 57, 
-	63, 64, 64, 52, 52, 52, 52, 65, 
-	66, 67, 52, 53, 52, 52, 52, 52, 
-	52, 52, 52, 52, 52, 52, 52, 52, 
-	52, 52, 57, 58, 59, 60, 52, 52, 
-	52, 52, 52, 52, 52, 52, 52, 52, 
-	65, 66, 67, 52, 53, 52, 52, 52, 
-	52, 52, 52, 52, 52, 52, 52, 52, 
-	52, 52, 52, 52, 58, 59, 60, 52, 
-	53, 52, 52, 52, 52, 52, 52, 52, 
-	52, 52, 52, 52, 52, 52, 52, 52, 
-	52, 59, 60, 52, 53, 52, 52, 52, 
-	52, 52, 52, 52, 52, 52, 52, 52, 
-	52, 52, 52, 52, 52, 52, 60, 52, 
-	53, 52, 52, 52, 52, 52, 52, 52, 
-	52, 52, 52, 52, 52, 52, 52, 52, 
-	58, 59, 60, 52, 52, 52, 52, 52, 
-	52, 52, 52, 52, 52, 65, 66, 67, 
-	52, 53, 52, 52, 52, 52, 52, 52, 
-	52, 52, 52, 52, 52, 52, 52, 52, 
-	52, 58, 59, 60, 52, 52, 52, 52, 
-	52, 52, 52, 52, 52, 52, 52, 66, 
-	67, 52, 53, 52, 52, 52, 52, 52, 
-	52, 52, 52, 52, 52, 52, 52, 52, 
-	52, 52, 58, 59, 60, 52, 52, 52, 
-	52, 52, 52, 52, 52, 52, 52, 52, 
-	52, 67, 52, 53, 52, 52, 52, 52, 
-	52, 52, 52, 52, 52, 52, 52, 52, 
-	52, 52, 57, 58, 59, 60, 52, 62, 
-	57, 52, 52, 52, 52, 52, 52, 52, 
-	65, 66, 67, 52, 53, 52, 52, 52, 
-	52, 52, 52, 52, 52, 52, 52, 52, 
-	52, 52, 52, 57, 58, 59, 60, 52, 
-	52, 57, 52, 52, 52, 52, 52, 52, 
-	52, 65, 66, 67, 52, 53, 52, 52, 
-	52, 52, 52, 52, 52, 52, 52, 52, 
-	52, 52, 52, 52, 57, 58, 59, 60, 
-	61, 62, 57, 52, 52, 52, 52, 52, 
-	52, 52, 65, 66, 67, 52, 53, 52, 
-	52, 54, 55, 52, 52, 52, 52, 52, 
-	52, 52, 52, 52, 52, 57, 58, 59, 
-	60, 61, 62, 57, 63, 52, 64, 52, 
-	52, 52, 52, 65, 66, 67, 52, 53, 
-	52, 52, 54, 55, 52, 52, 52, 52, 
-	52, 52, 52, 52, 52, 52, 57, 58, 
-	59, 60, 61, 62, 57, 63, 56, 64, 
-	52, 52, 52, 52, 65, 66, 67, 52, 
-	70, 71, 69, 69, 69, 69, 69, 69, 
-	69, 72, 69, 70, 71, 69, 7, 73, 
-	73, 3, 9, 73, 73, 73, 73, 73, 
-	73, 73, 73, 74, 12, 13, 14, 15, 
-	16, 17, 18, 12, 19, 21, 21, 22, 
-	23, 24, 73, 25, 26, 27, 73, 7, 
-	73, 73, 3, 9, 73, 73, 73, 73, 
-	73, 73, 73, 73, 73, 12, 13, 14, 
-	15, 16, 17, 18, 12, 19, 21, 21, 
-	22, 23, 24, 73, 25, 26, 27, 73, 
-	7, 73, 73, 73, 73, 73, 73, 73, 
-	73, 73, 73, 73, 73, 73, 12, 13, 
-	14, 15, 16, 73, 73, 73, 73, 73, 
-	73, 22, 23, 24, 73, 25, 26, 27, 
-	73, 7, 73, 73, 73, 73, 73, 73, 
-	73, 73, 73, 73, 73, 73, 73, 73, 
-	13, 14, 15, 16, 73, 73, 73, 73, 
-	73, 73, 73, 73, 73, 73, 25, 26, 
-	27, 73, 7, 73, 73, 73, 73, 73, 
-	73, 73, 73, 73, 73, 73, 73, 73, 
-	73, 73, 14, 15, 16, 73, 7, 73, 
-	73, 73, 73, 73, 73, 73, 73, 73, 
-	73, 73, 73, 73, 73, 73, 73, 15, 
-	16, 73, 7, 73, 73, 73, 73, 73, 
-	73, 73, 73, 73, 73, 73, 73, 73, 
-	73, 73, 73, 73, 16, 73, 7, 73, 
-	73, 73, 73, 73, 73, 73, 73, 73, 
-	73, 73, 73, 73, 73, 73, 14, 15, 
-	16, 73, 73, 73, 73, 73, 73, 73, 
-	73, 73, 73, 25, 26, 27, 73, 7, 
-	73, 73, 73, 73, 73, 73, 73, 73, 
-	73, 73, 73, 73, 73, 73, 73, 14, 
-	15, 16, 73, 73, 73, 73, 73, 73, 
-	73, 73, 73, 73, 73, 26, 27, 73, 
-	7, 73, 73, 73, 73, 73, 73, 73, 
-	73, 73, 73, 73, 73, 73, 73, 73, 
-	14, 15, 16, 73, 73, 73, 73, 73, 
-	73, 73, 73, 73, 73, 73, 73, 27, 
-	73, 7, 73, 73, 73, 73, 73, 73, 
-	73, 73, 73, 73, 73, 73, 73, 73, 
-	13, 14, 15, 16, 73, 73, 73, 73, 
-	73, 73, 22, 23, 24, 73, 25, 26, 
-	27, 73, 7, 73, 73, 73, 73, 73, 
-	73, 73, 73, 73, 73, 73, 73, 73, 
-	73, 13, 14, 15, 16, 73, 73, 73, 
-	73, 73, 73, 73, 23, 24, 73, 25, 
-	26, 27, 73, 7, 73, 73, 73, 73, 
-	73, 73, 73, 73, 73, 73, 73, 73, 
-	73, 73, 13, 14, 15, 16, 73, 73, 
-	73, 73, 73, 73, 73, 73, 24, 73, 
-	25, 26, 27, 73, 7, 73, 73, 73, 
-	73, 73, 73, 73, 73, 73, 73, 73, 
-	73, 73, 12, 13, 14, 15, 16, 73, 
-	18, 12, 73, 73, 73, 22, 23, 24, 
-	73, 25, 26, 27, 73, 7, 73, 73, 
-	73, 73, 73, 73, 73, 73, 73, 73, 
-	73, 73, 73, 12, 13, 14, 15, 16, 
-	73, 73, 12, 73, 73, 73, 22, 23, 
-	24, 73, 25, 26, 27, 73, 7, 73, 
-	73, 73, 73, 73, 73, 73, 73, 73, 
-	73, 73, 73, 73, 12, 13, 14, 15, 
-	16, 17, 18, 12, 73, 73, 73, 22, 
-	23, 24, 73, 25, 26, 27, 73, 7, 
-	73, 73, 3, 9, 73, 73, 73, 73, 
-	73, 73, 73, 73, 73, 12, 13, 14, 
-	15, 16, 17, 18, 12, 19, 73, 21, 
-	22, 23, 24, 73, 25, 26, 27, 73, 
-	5, 6, 73, 73, 5, 73, 73, 7, 
-	73, 73, 3, 9, 73, 73, 73, 73, 
-	73, 73, 73, 73, 73, 12, 13, 14, 
-	15, 16, 17, 18, 12, 19, 20, 21, 
-	22, 23, 24, 73, 25, 26, 27, 73, 
-	7, 73, 73, 3, 9, 73, 73, 73, 
-	73, 73, 73, 73, 73, 73, 12, 13, 
-	14, 15, 16, 17, 18, 12, 19, 20, 
-	21, 22, 23, 24, 73, 25, 26, 27, 
-	73, 76, 75, 75, 75, 75, 75, 75, 
-	75, 75, 75, 75, 75, 75, 75, 75, 
-	75, 75, 75, 75, 75, 76, 77, 75, 
-	76, 77, 75, 77, 75, 0
+	1, 0, 2, 3, 4, 2, 5, 3, 
+	4, 4, 6, 4, 4, 1, 7, 4, 
+	4, 4, 2, 2, 8, 9, 4, 4, 
+	10, 11, 12, 13, 14, 15, 16, 10, 
+	17, 18, 19, 20, 21, 22, 4, 23, 
+	24, 25, 4, 27, 26, 29, 28, 28, 
+	30, 31, 28, 28, 28, 28, 28, 28, 
+	28, 28, 32, 33, 34, 35, 36, 37, 
+	38, 39, 33, 40, 32, 41, 42, 43, 
+	44, 28, 45, 46, 47, 28, 29, 28, 
+	28, 30, 31, 28, 28, 28, 28, 28, 
+	28, 28, 28, 48, 33, 34, 35, 36, 
+	37, 38, 39, 33, 40, 41, 41, 42, 
+	43, 44, 28, 45, 46, 47, 28, 30, 
+	49, 29, 28, 28, 30, 31, 28, 28, 
+	28, 28, 28, 28, 28, 28, 28, 33, 
+	34, 35, 36, 37, 38, 39, 33, 40, 
+	41, 41, 42, 43, 44, 28, 45, 46, 
+	47, 28, 29, 28, 28, 28, 28, 28, 
+	28, 28, 28, 28, 28, 28, 28, 28, 
+	33, 34, 35, 36, 37, 28, 28, 28, 
+	28, 28, 28, 42, 43, 44, 28, 45, 
+	46, 47, 28, 29, 28, 28, 28, 28, 
+	28, 28, 28, 28, 28, 28, 28, 28, 
+	28, 28, 34, 35, 36, 37, 28, 28, 
+	28, 28, 28, 28, 28, 28, 28, 28, 
+	45, 46, 47, 28, 29, 28, 28, 28, 
+	28, 28, 28, 28, 28, 28, 28, 28, 
+	28, 28, 28, 28, 35, 36, 37, 28, 
+	29, 28, 28, 28, 28, 28, 28, 28, 
+	28, 28, 28, 28, 28, 28, 28, 28, 
+	28, 36, 37, 28, 29, 28, 28, 28, 
+	28, 28, 28, 28, 28, 28, 28, 28, 
+	28, 28, 28, 28, 28, 28, 37, 28, 
+	29, 28, 28, 28, 28, 28, 28, 28, 
+	28, 28, 28, 28, 28, 28, 28, 28, 
+	35, 36, 37, 28, 28, 28, 28, 28, 
+	28, 28, 28, 28, 28, 45, 46, 47, 
+	28, 29, 28, 28, 28, 28, 28, 28, 
+	28, 28, 28, 28, 28, 28, 28, 28, 
+	28, 35, 36, 37, 28, 28, 28, 28, 
+	28, 28, 28, 28, 28, 28, 28, 46, 
+	47, 28, 29, 28, 28, 28, 28, 28, 
+	28, 28, 28, 28, 28, 28, 28, 28, 
+	28, 28, 35, 36, 37, 28, 28, 28, 
+	28, 28, 28, 28, 28, 28, 28, 28, 
+	28, 47, 28, 29, 28, 28, 28, 28, 
+	28, 28, 28, 28, 28, 28, 28, 28, 
+	28, 28, 34, 35, 36, 37, 28, 28, 
+	28, 28, 28, 28, 42, 43, 44, 28, 
+	45, 46, 47, 28, 29, 28, 28, 28, 
+	28, 28, 28, 28, 28, 28, 28, 28, 
+	28, 28, 28, 34, 35, 36, 37, 28, 
+	28, 28, 28, 28, 28, 28, 43, 44, 
+	28, 45, 46, 47, 28, 29, 28, 28, 
+	28, 28, 28, 28, 28, 28, 28, 28, 
+	28, 28, 28, 28, 34, 35, 36, 37, 
+	28, 28, 28, 28, 28, 28, 28, 28, 
+	44, 28, 45, 46, 47, 28, 29, 28, 
+	28, 28, 28, 28, 28, 28, 28, 28, 
+	28, 28, 28, 28, 33, 34, 35, 36, 
+	37, 28, 39, 33, 28, 28, 28, 42, 
+	43, 44, 28, 45, 46, 47, 28, 29, 
+	28, 28, 28, 28, 28, 28, 28, 28, 
+	28, 28, 28, 28, 28, 33, 34, 35, 
+	36, 37, 28, 28, 33, 28, 28, 28, 
+	42, 43, 44, 28, 45, 46, 47, 28, 
+	29, 28, 28, 28, 28, 28, 28, 28, 
+	28, 28, 28, 28, 28, 28, 33, 34, 
+	35, 36, 37, 38, 39, 33, 28, 28, 
+	28, 42, 43, 44, 28, 45, 46, 47, 
+	28, 29, 28, 28, 30, 31, 28, 28, 
+	28, 28, 28, 28, 28, 28, 28, 33, 
+	34, 35, 36, 37, 38, 39, 33, 40, 
+	28, 41, 42, 43, 44, 28, 45, 46, 
+	47, 28, 29, 28, 28, 30, 31, 28, 
+	28, 28, 28, 28, 28, 28, 28, 28, 
+	33, 34, 35, 36, 37, 38, 39, 33, 
+	40, 32, 41, 42, 43, 44, 28, 45, 
+	46, 47, 28, 51, 50, 50, 50, 50, 
+	50, 50, 50, 52, 50, 5, 53, 51, 
+	50, 6, 54, 54, 1, 55, 54, 54, 
+	54, 54, 54, 54, 54, 54, 56, 10, 
+	11, 12, 13, 14, 15, 16, 10, 17, 
+	19, 19, 20, 21, 22, 54, 23, 24, 
+	25, 54, 6, 54, 54, 1, 55, 54, 
+	54, 54, 54, 54, 54, 54, 54, 54, 
+	10, 11, 12, 13, 14, 15, 16, 10, 
+	17, 19, 19, 20, 21, 22, 54, 23, 
+	24, 25, 54, 6, 54, 54, 54, 54, 
+	54, 54, 54, 54, 54, 54, 54, 54, 
+	54, 10, 11, 12, 13, 14, 54, 54, 
+	54, 54, 54, 54, 20, 21, 22, 54, 
+	23, 24, 25, 54, 6, 54, 54, 54, 
+	54, 54, 54, 54, 54, 54, 54, 54, 
+	54, 54, 54, 11, 12, 13, 14, 54, 
+	54, 54, 54, 54, 54, 54, 54, 54, 
+	54, 23, 24, 25, 54, 6, 54, 54, 
+	54, 54, 54, 54, 54, 54, 54, 54, 
+	54, 54, 54, 54, 54, 12, 13, 14, 
+	54, 6, 54, 54, 54, 54, 54, 54, 
+	54, 54, 54, 54, 54, 54, 54, 54, 
+	54, 54, 13, 14, 54, 6, 54, 54, 
+	54, 54, 54, 54, 54, 54, 54, 54, 
+	54, 54, 54, 54, 54, 54, 54, 14, 
+	54, 6, 54, 54, 54, 54, 54, 54, 
+	54, 54, 54, 54, 54, 54, 54, 54, 
+	54, 12, 13, 14, 54, 54, 54, 54, 
+	54, 54, 54, 54, 54, 54, 23, 24, 
+	25, 54, 6, 54, 54, 54, 54, 54, 
+	54, 54, 54, 54, 54, 54, 54, 54, 
+	54, 54, 12, 13, 14, 54, 54, 54, 
+	54, 54, 54, 54, 54, 54, 54, 54, 
+	24, 25, 54, 6, 54, 54, 54, 54, 
+	54, 54, 54, 54, 54, 54, 54, 54, 
+	54, 54, 54, 12, 13, 14, 54, 54, 
+	54, 54, 54, 54, 54, 54, 54, 54, 
+	54, 54, 25, 54, 6, 54, 54, 54, 
+	54, 54, 54, 54, 54, 54, 54, 54, 
+	54, 54, 54, 11, 12, 13, 14, 54, 
+	54, 54, 54, 54, 54, 20, 21, 22, 
+	54, 23, 24, 25, 54, 6, 54, 54, 
+	54, 54, 54, 54, 54, 54, 54, 54, 
+	54, 54, 54, 54, 11, 12, 13, 14, 
+	54, 54, 54, 54, 54, 54, 54, 21, 
+	22, 54, 23, 24, 25, 54, 6, 54, 
+	54, 54, 54, 54, 54, 54, 54, 54, 
+	54, 54, 54, 54, 54, 11, 12, 13, 
+	14, 54, 54, 54, 54, 54, 54, 54, 
+	54, 22, 54, 23, 24, 25, 54, 6, 
+	54, 54, 54, 54, 54, 54, 54, 54, 
+	54, 54, 54, 54, 54, 10, 11, 12, 
+	13, 14, 54, 16, 10, 54, 54, 54, 
+	20, 21, 22, 54, 23, 24, 25, 54, 
+	6, 54, 54, 54, 54, 54, 54, 54, 
+	54, 54, 54, 54, 54, 54, 10, 11, 
+	12, 13, 14, 54, 54, 10, 54, 54, 
+	54, 20, 21, 22, 54, 23, 24, 25, 
+	54, 6, 54, 54, 54, 54, 54, 54, 
+	54, 54, 54, 54, 54, 54, 54, 10, 
+	11, 12, 13, 14, 15, 16, 10, 54, 
+	54, 54, 20, 21, 22, 54, 23, 24, 
+	25, 54, 6, 54, 54, 1, 55, 54, 
+	54, 54, 54, 54, 54, 54, 54, 54, 
+	10, 11, 12, 13, 14, 15, 16, 10, 
+	17, 54, 19, 20, 21, 22, 54, 23, 
+	24, 25, 54, 1, 57, 3, 54, 54, 
+	54, 3, 54, 54, 6, 54, 54, 1, 
+	55, 54, 54, 54, 54, 54, 54, 54, 
+	54, 54, 10, 11, 12, 13, 14, 15, 
+	16, 10, 17, 18, 19, 20, 21, 22, 
+	54, 23, 24, 25, 54, 6, 54, 54, 
+	1, 55, 54, 54, 54, 54, 54, 54, 
+	54, 54, 54, 10, 11, 12, 13, 14, 
+	15, 16, 10, 17, 18, 19, 20, 21, 
+	22, 54, 23, 24, 25, 54, 59, 58, 
+	58, 58, 58, 58, 58, 58, 58, 58, 
+	58, 58, 58, 58, 58, 58, 58, 58, 
+	58, 58, 59, 60, 58, 59, 60, 58, 
+	60, 58, 0
 };
 
 static const char _use_syllable_machine_trans_targs[] = {
-	3, 41, 3, 43, 4, 5, 25, 3, 
-	0, 2, 60, 62, 45, 46, 47, 48, 
-	49, 56, 57, 58, 61, 59, 53, 54, 
-	55, 50, 51, 52, 3, 3, 3, 3, 
-	6, 7, 24, 9, 10, 11, 12, 13, 
-	20, 21, 22, 23, 17, 18, 19, 14, 
-	15, 16, 8, 3, 3, 3, 26, 27, 
-	40, 29, 30, 31, 32, 36, 37, 38, 
-	39, 33, 34, 35, 28, 3, 3, 1, 
-	42, 3, 44, 3, 63, 64
+	1, 26, 2, 3, 1, 23, 1, 43, 
+	44, 46, 28, 29, 30, 31, 32, 39, 
+	40, 41, 45, 42, 36, 37, 38, 33, 
+	34, 35, 1, 1, 1, 1, 4, 5, 
+	22, 7, 8, 9, 10, 11, 18, 19, 
+	20, 21, 15, 16, 17, 12, 13, 14, 
+	6, 1, 1, 24, 25, 1, 1, 0, 
+	27, 1, 1, 47, 48
 };
 
 static const char _use_syllable_machine_trans_actions[] = {
-	1, 2, 3, 4, 0, 0, 0, 7, 
-	0, 0, 4, 0, 0, 0, 0, 0, 
-	0, 0, 0, 0, 4, 4, 0, 0, 
-	0, 0, 0, 0, 8, 9, 10, 11, 
+	1, 2, 0, 0, 5, 0, 6, 0, 
+	2, 0, 0, 0, 0, 0, 0, 0, 
+	0, 0, 2, 2, 0, 0, 0, 0, 
+	0, 0, 7, 8, 9, 10, 0, 0, 
 	0, 0, 0, 0, 0, 0, 0, 0, 
 	0, 0, 0, 0, 0, 0, 0, 0, 
-	0, 0, 0, 12, 13, 14, 0, 0, 
-	0, 0, 0, 0, 0, 0, 0, 0, 
-	0, 0, 0, 0, 0, 15, 16, 0, 
-	2, 17, 4, 18, 0, 0
+	0, 11, 12, 0, 0, 13, 14, 0, 
+	2, 15, 16, 0, 0
 };
 
 static const char _use_syllable_machine_to_state_actions[] = {
-	0, 0, 0, 5, 0, 0, 0, 0, 
+	0, 3, 0, 0, 0, 0, 0, 0, 
 	0, 0, 0, 0, 0, 0, 0, 0, 
 	0, 0, 0, 0, 0, 0, 0, 0, 
 	0, 0, 0, 0, 0, 0, 0, 0, 
 	0, 0, 0, 0, 0, 0, 0, 0, 
 	0, 0, 0, 0, 0, 0, 0, 0, 
-	0, 0, 0, 0, 0, 0, 0, 0, 
-	0, 0, 0, 0, 0, 0, 0, 0, 
 	0
 };
 
 static const char _use_syllable_machine_from_state_actions[] = {
-	0, 0, 0, 6, 0, 0, 0, 0, 
+	0, 4, 0, 0, 0, 0, 0, 0, 
 	0, 0, 0, 0, 0, 0, 0, 0, 
 	0, 0, 0, 0, 0, 0, 0, 0, 
 	0, 0, 0, 0, 0, 0, 0, 0, 
 	0, 0, 0, 0, 0, 0, 0, 0, 
 	0, 0, 0, 0, 0, 0, 0, 0, 
-	0, 0, 0, 0, 0, 0, 0, 0, 
-	0, 0, 0, 0, 0, 0, 0, 0, 
 	0
 };
 
 static const short _use_syllable_machine_eof_trans[] = {
-	0, 1, 3, 0, 29, 31, 31, 52, 
-	31, 31, 31, 31, 31, 31, 31, 31, 
-	31, 31, 31, 31, 31, 31, 31, 31, 
-	31, 53, 53, 52, 53, 53, 53, 53, 
-	53, 53, 53, 53, 53, 53, 53, 53, 
-	53, 70, 70, 74, 74, 74, 74, 74, 
-	74, 74, 74, 74, 74, 74, 74, 74, 
-	74, 74, 74, 74, 74, 74, 76, 76, 
-	76
+	1, 0, 27, 29, 29, 50, 29, 29, 
+	29, 29, 29, 29, 29, 29, 29, 29, 
+	29, 29, 29, 29, 29, 29, 29, 51, 
+	54, 51, 55, 55, 55, 55, 55, 55, 
+	55, 55, 55, 55, 55, 55, 55, 55, 
+	55, 55, 55, 58, 55, 55, 59, 59, 
+	59
 };
 
-static const int use_syllable_machine_start = 3;
-static const int use_syllable_machine_first_final = 3;
-static const int use_syllable_machine_error = 0;
+static const int use_syllable_machine_start = 1;
+static const int use_syllable_machine_first_final = 1;
+static const int use_syllable_machine_error = -1;
 
-static const int use_syllable_machine_en_main = 3;
+static const int use_syllable_machine_en_main = 1;
 
 
 #line 38 "hb-ot-shape-complex-use-machine.rl"
@@ -364,7 +291,7 @@
 
 
 
-#line 145 "hb-ot-shape-complex-use-machine.rl"
+#line 138 "hb-ot-shape-complex-use-machine.rl"
 
 
 #define found_syllable(syllable_type) \
@@ -384,7 +311,7 @@
   int cs;
   hb_glyph_info_t *info = buffer->info;
   
-#line 388 "hb-ot-shape-complex-use-machine.hh"
+#line 315 "hb-ot-shape-complex-use-machine.hh"
 	{
 	cs = use_syllable_machine_start;
 	ts = 0;
@@ -392,7 +319,7 @@
 	act = 0;
 	}
 
-#line 166 "hb-ot-shape-complex-use-machine.rl"
+#line 159 "hb-ot-shape-complex-use-machine.rl"
 
 
   p = 0;
@@ -401,7 +328,7 @@
   unsigned int last = 0;
   unsigned int syllable_serial = 1;
   
-#line 405 "hb-ot-shape-complex-use-machine.hh"
+#line 332 "hb-ot-shape-complex-use-machine.hh"
 	{
 	int _slen;
 	int _trans;
@@ -409,15 +336,13 @@
 	const char *_inds;
 	if ( p == pe )
 		goto _test_eof;
-	if ( cs == 0 )
-		goto _out;
 _resume:
 	switch ( _use_syllable_machine_from_state_actions[cs] ) {
-	case 6:
+	case 4:
 #line 1 "NONE"
 	{ts = p;}
 	break;
-#line 421 "hb-ot-shape-complex-use-machine.hh"
+#line 346 "hb-ot-shape-complex-use-machine.hh"
 	}
 
 	_keys = _use_syllable_machine_trans_keys + (cs<<1);
@@ -439,92 +364,70 @@
 #line 1 "NONE"
 	{te = p+1;}
 	break;
-	case 9:
-#line 134 "hb-ot-shape-complex-use-machine.rl"
+	case 8:
+#line 127 "hb-ot-shape-complex-use-machine.rl"
 	{te = p+1;{ found_syllable (independent_cluster); }}
 	break;
-	case 11:
-#line 136 "hb-ot-shape-complex-use-machine.rl"
-	{te = p+1;{ found_syllable (consonant_cluster); }}
+	case 10:
+#line 129 "hb-ot-shape-complex-use-machine.rl"
+	{te = p+1;{ found_syllable (standard_cluster); }}
 	break;
-	case 14:
-#line 137 "hb-ot-shape-complex-use-machine.rl"
-	{te = p+1;{ found_syllable (vowel_cluster); }}
+	case 6:
+#line 133 "hb-ot-shape-complex-use-machine.rl"
+	{te = p+1;{ found_syllable (broken_cluster); }}
 	break;
-	case 16:
-#line 138 "hb-ot-shape-complex-use-machine.rl"
-	{te = p+1;{ found_syllable (number_joiner_terminated_cluster); }}
+	case 5:
+#line 134 "hb-ot-shape-complex-use-machine.rl"
+	{te = p+1;{ found_syllable (non_cluster); }}
 	break;
 	case 7:
-#line 141 "hb-ot-shape-complex-use-machine.rl"
-	{te = p+1;{ found_syllable (broken_cluster); }}
-	break;
-	case 8:
-#line 134 "hb-ot-shape-complex-use-machine.rl"
+#line 127 "hb-ot-shape-complex-use-machine.rl"
 	{te = p;p--;{ found_syllable (independent_cluster); }}
 	break;
-	case 12:
-#line 135 "hb-ot-shape-complex-use-machine.rl"
+	case 11:
+#line 128 "hb-ot-shape-complex-use-machine.rl"
 	{te = p;p--;{ found_syllable (virama_terminated_cluster); }}
 	break;
-	case 10:
-#line 136 "hb-ot-shape-complex-use-machine.rl"
-	{te = p;p--;{ found_syllable (consonant_cluster); }}
+	case 9:
+#line 129 "hb-ot-shape-complex-use-machine.rl"
+	{te = p;p--;{ found_syllable (standard_cluster); }}
 	break;
 	case 13:
-#line 137 "hb-ot-shape-complex-use-machine.rl"
-	{te = p;p--;{ found_syllable (vowel_cluster); }}
+#line 130 "hb-ot-shape-complex-use-machine.rl"
+	{te = p;p--;{ found_syllable (number_joiner_terminated_cluster); }}
 	break;
-	case 15:
-#line 139 "hb-ot-shape-complex-use-machine.rl"
+	case 12:
+#line 131 "hb-ot-shape-complex-use-machine.rl"
 	{te = p;p--;{ found_syllable (numeral_cluster); }}
 	break;
-	case 18:
-#line 140 "hb-ot-shape-complex-use-machine.rl"
+	case 16:
+#line 132 "hb-ot-shape-complex-use-machine.rl"
 	{te = p;p--;{ found_syllable (symbol_cluster); }}
 	break;
-	case 17:
-#line 141 "hb-ot-shape-complex-use-machine.rl"
+	case 14:
+#line 133 "hb-ot-shape-complex-use-machine.rl"
 	{te = p;p--;{ found_syllable (broken_cluster); }}
 	break;
+	case 15:
+#line 134 "hb-ot-shape-complex-use-machine.rl"
+	{te = p;p--;{ found_syllable (non_cluster); }}
+	break;
 	case 1:
-#line 139 "hb-ot-shape-complex-use-machine.rl"
-	{{p = ((te))-1;}{ found_syllable (numeral_cluster); }}
+#line 133 "hb-ot-shape-complex-use-machine.rl"
+	{{p = ((te))-1;}{ found_syllable (broken_cluster); }}
 	break;
-	case 3:
-#line 1 "NONE"
-	{	switch( act ) {
-	case 0:
-	{{cs = 0; goto _again;}}
-	break;
-	case 8:
-	{{p = ((te))-1;} found_syllable (broken_cluster); }
-	break;
+#line 420 "hb-ot-shape-complex-use-machine.hh"
 	}
-	}
-	break;
-	case 4:
-#line 1 "NONE"
-	{te = p+1;}
-#line 141 "hb-ot-shape-complex-use-machine.rl"
-	{act = 8;}
-	break;
-#line 513 "hb-ot-shape-complex-use-machine.hh"
-	}
 
 _again:
 	switch ( _use_syllable_machine_to_state_actions[cs] ) {
-	case 5:
+	case 3:
 #line 1 "NONE"
 	{ts = 0;}
-#line 1 "NONE"
-	{act = 0;}
 	break;
-#line 524 "hb-ot-shape-complex-use-machine.hh"
+#line 429 "hb-ot-shape-complex-use-machine.hh"
 	}
 
-	if ( cs == 0 )
-		goto _out;
 	if ( ++p != pe )
 		goto _resume;
 	_test_eof: {}
@@ -536,10 +439,9 @@
 	}
 	}
 
-	_out: {}
 	}
 
-#line 175 "hb-ot-shape-complex-use-machine.rl"
+#line 168 "hb-ot-shape-complex-use-machine.rl"
 
 }
 

Modified: trunk/Build/source/libs/harfbuzz/harfbuzz-src/src/hb-ot-shape-complex-use-machine.rl
===================================================================
--- trunk/Build/source/libs/harfbuzz/harfbuzz-src/src/hb-ot-shape-complex-use-machine.rl	2016-07-21 23:20:53 UTC (rev 41747)
+++ trunk/Build/source/libs/harfbuzz/harfbuzz-src/src/hb-ot-shape-complex-use-machine.rl	2016-07-21 23:35:31 UTC (rev 41748)
@@ -44,7 +44,6 @@
 O	= 0; # OTHER
 
 B	= 1; # BASE
-IV	= 2; # BASE_VOWEL
 IND	= 3; # BASE_IND
 N	= 4; # BASE_NUM
 GB	= 5; # BASE_OTHER
@@ -96,11 +95,11 @@
 final_consonants = FAbv* FBlw* FPst* FM?;
 
 virama_terminated_cluster =
-	R? (B | GB | IV) VS?
+	R? (B | GB) VS?
 	consonant_modifiers
 	H
 ;
-consonant_cluster =
+standard_cluster =
 	R? (B | GB) VS?
 	consonant_modifiers
 	medial_consonants
@@ -108,13 +107,6 @@
 	vowel_modifiers
 	final_consonants
 ;
-vowel_cluster =
-	R? (IV) VS?
-	consonant_modifiers
-	medial_consonants
-	vowel_modifiers
-	final_consonants
-;
 
 broken_cluster =
 	R?
@@ -125,20 +117,21 @@
 	final_consonants
 ;
 
-number_joiner_terminated_cluster = N VS? (HN N VS?)* H;
+number_joiner_terminated_cluster = N VS? (HN N VS?)* HN;
 numeral_cluster = N VS? (HN N VS?)*;
 symbol_cluster = S VS? SMAbv* SMBlw*;
 independent_cluster = (IND | O | Rsv | WJ) VS?;
+other = any;
 
 main := |*
 	independent_cluster			=> { found_syllable (independent_cluster); };
 	virama_terminated_cluster		=> { found_syllable (virama_terminated_cluster); };
-	consonant_cluster			=> { found_syllable (consonant_cluster); };
-	vowel_cluster				=> { found_syllable (vowel_cluster); };
+	standard_cluster			=> { found_syllable (standard_cluster); };
 	number_joiner_terminated_cluster	=> { found_syllable (number_joiner_terminated_cluster); };
 	numeral_cluster				=> { found_syllable (numeral_cluster); };
 	symbol_cluster				=> { found_syllable (symbol_cluster); };
 	broken_cluster				=> { found_syllable (broken_cluster); };
+	other					=> { found_syllable (non_cluster); };
 *|;
 
 

Modified: trunk/Build/source/libs/harfbuzz/harfbuzz-src/src/hb-ot-shape-complex-use-private.hh
===================================================================
--- trunk/Build/source/libs/harfbuzz/harfbuzz-src/src/hb-ot-shape-complex-use-private.hh	2016-07-21 23:20:53 UTC (rev 41747)
+++ trunk/Build/source/libs/harfbuzz/harfbuzz-src/src/hb-ot-shape-complex-use-private.hh	2016-07-21 23:35:31 UTC (rev 41748)
@@ -46,7 +46,6 @@
   USE_O		= 0,	/* OTHER */
 
   USE_B		= 1,	/* BASE */
-  USE_IV	= 2,	/* BASE_VOWEL */
   USE_IND	= 3,	/* BASE_IND */
   USE_N		= 4,	/* BASE_NUM */
   USE_GB	= 5,	/* BASE_OTHER */

Modified: trunk/Build/source/libs/harfbuzz/harfbuzz-src/src/hb-ot-shape-complex-use-table.cc
===================================================================
--- trunk/Build/source/libs/harfbuzz/harfbuzz-src/src/hb-ot-shape-complex-use-table.cc	2016-07-21 23:20:53 UTC (rev 41747)
+++ trunk/Build/source/libs/harfbuzz/harfbuzz-src/src/hb-ot-shape-complex-use-table.cc	2016-07-21 23:35:31 UTC (rev 41748)
@@ -6,12 +6,12 @@
  *
  * on files with these headers:
  *
- * # IndicSyllabicCategory-8.0.0.txt
- * # Date: 2015-05-12, 10:00:00 GMT [RP, KW, LI]
- * # IndicPositionalCategory-8.0.0.txt
- * # Date: 2015-05-12, 10:00:00 GMT [RP, KW, LI]
- * # Blocks-8.0.0.txt
- * # Date: 2014-11-10, 23:04:00 GMT [KW]
+ * # IndicSyllabicCategory-9.0.0.txt
+ * # Date: 2016-05-21, 02:46:00 GMT [RP]
+ * # IndicPositionalCategory-9.0.0.txt
+ * # Date: 2016-02-25, 00:48:00 GMT [RP]
+ * # Blocks-9.0.0.txt
+ * # Date: 2016-02-05, 23:48:00 GMT [KW]
  * UnicodeData.txt does not have a header.
  */
 
@@ -24,7 +24,6 @@
 #define H	USE_H	/* HALANT */
 #define HN	USE_HN	/* HALANT_NUM */
 #define IND	USE_IND	/* BASE_IND */
-#define IV	USE_IV	/* BASE_VOWEL */
 #define N	USE_N	/* BASE_NUM */
 #define O	USE_O	/* OTHER */
 #define R	USE_R	/* REPHA */
@@ -80,30 +79,30 @@
 
   /* Devanagari */
 
-  /* 0900 */ VMAbv, VMAbv, VMAbv, VMPst,    IV,    IV,    IV,    IV,    IV,    IV,    IV,    IV,    IV,    IV,    IV,    IV,
-  /* 0910 */    IV,    IV,    IV,    IV,    IV,     B,     B,     B,     B,     B,     B,     B,     B,     B,     B,     B,
+  /* 0900 */ VMAbv, VMAbv, VMAbv, VMPst,     B,     B,     B,     B,     B,     B,     B,     B,     B,     B,     B,     B,
+  /* 0910 */     B,     B,     B,     B,     B,     B,     B,     B,     B,     B,     B,     B,     B,     B,     B,     B,
   /* 0920 */     B,     B,     B,     B,     B,     B,     B,     B,     B,     B,     B,     B,     B,     B,     B,     B,
   /* 0930 */     B,     B,     B,     B,     B,     B,     B,     B,     B,     B,  VAbv,  VPst, CMBlw,     B,  VPst,  VPre,
   /* 0940 */  VPst,  VBlw,  VBlw,  VBlw,  VBlw,  VAbv,  VAbv,  VAbv,  VAbv,  VPst,  VPst,  VPst,  VPst,     H,  VPre,  VPst,
   /* 0950 */     O, VMAbv, VMBlw,     O,     O,  VAbv,  VBlw,  VBlw,     B,     B,     B,     B,     B,     B,     B,     B,
-  /* 0960 */    IV,    IV,  VBlw,  VBlw,     O,     O,     B,     B,     B,     B,     B,     B,     B,     B,     B,     B,
-  /* 0970 */     O,     O,    IV,    IV,    IV,    IV,    IV,    IV,     B,     B,     B,     B,     B,     B,     B,     B,
+  /* 0960 */     B,     B,  VBlw,  VBlw,     O,     O,     B,     B,     B,     B,     B,     B,     B,     B,     B,     B,
+  /* 0970 */     O,     O,     B,     B,     B,     B,     B,     B,     B,     B,     B,     B,     B,     B,     B,     B,
 
   /* Bengali */
 
-  /* 0980 */     O, VMAbv, VMPst, VMPst,     O,    IV,    IV,    IV,    IV,    IV,    IV,    IV,    IV,     O,     O,    IV,
-  /* 0990 */    IV,     O,     O,    IV,    IV,     B,     B,     B,     B,     B,     B,     B,     B,     B,     B,     B,
+  /* 0980 */     O, VMAbv, VMPst, VMPst,     O,     B,     B,     B,     B,     B,     B,     B,     B,     O,     O,     B,
+  /* 0990 */     B,     O,     O,     B,     B,     B,     B,     B,     B,     B,     B,     B,     B,     B,     B,     B,
   /* 09A0 */     B,     B,     B,     B,     B,     B,     B,     B,     B,     O,     B,     B,     B,     B,     B,     B,
   /* 09B0 */     B,     O,     B,     O,     O,     O,     B,     B,     B,     B,     O,     O, CMBlw,     B,  VPst,  VPre,
   /* 09C0 */  VPst,  VBlw,  VBlw,  VBlw,  VBlw,     O,     O,  VPre,  VPre,     O,     O,  VPre,  VPre,     H,   IND,     O,
   /* 09D0 */     O,     O,     O,     O,     O,     O,     O,  VPst,     O,     O,     O,     O,     B,     B,     O,     B,
-  /* 09E0 */    IV,    IV,  VBlw,  VBlw,     O,     O,     B,     B,     B,     B,     B,     B,     B,     B,     B,     B,
+  /* 09E0 */     B,     B,  VBlw,  VBlw,     O,     O,     B,     B,     B,     B,     B,     B,     B,     B,     B,     B,
   /* 09F0 */     B,     B,     O,     O,     O,     O,     O,     O,     O,     O,     O,     O,     O,     O,     O,     O,
 
   /* Gurmukhi */
 
-  /* 0A00 */     O, VMAbv, VMAbv, VMPst,     O,    IV,    IV,    IV,    IV,    IV,    IV,     O,     O,     O,     O,    IV,
-  /* 0A10 */    IV,     O,     O,    IV,    IV,     B,     B,     B,     B,     B,     B,     B,     B,     B,     B,     B,
+  /* 0A00 */     O, VMAbv, VMAbv, VMPst,     O,     B,     B,     B,     B,     B,     B,     O,     O,     O,     O,     B,
+  /* 0A10 */     B,     O,     O,     B,     B,     B,     B,     B,     B,     B,     B,     B,     B,     B,     B,     B,
   /* 0A20 */     B,     B,     B,     B,     B,     B,     B,     B,     B,     O,     B,     B,     B,     B,     B,     B,
   /* 0A30 */     B,     O,     B,     B,     O,     B,     B,     O,     B,     B,     O,     O, CMBlw,     O,  VPst,  VPre,
   /* 0A40 */  VPst,  VBlw,  VBlw,     O,     O,     O,     O,  VAbv,  VAbv,     O,     O,  VAbv,  VAbv,     H,     O,     O,
@@ -113,30 +112,30 @@
 
   /* Gujarati */
 
-  /* 0A80 */     O, VMAbv, VMAbv, VMPst,     O,    IV,    IV,    IV,    IV,    IV,    IV,    IV,    IV,    IV,     O,    IV,
-  /* 0A90 */    IV,    IV,     O,    IV,    IV,     B,     B,     B,     B,     B,     B,     B,     B,     B,     B,     B,
+  /* 0A80 */     O, VMAbv, VMAbv, VMPst,     O,     B,     B,     B,     B,     B,     B,     B,     B,     B,     O,     B,
+  /* 0A90 */     B,     B,     O,     B,     B,     B,     B,     B,     B,     B,     B,     B,     B,     B,     B,     B,
   /* 0AA0 */     B,     B,     B,     B,     B,     B,     B,     B,     B,     O,     B,     B,     B,     B,     B,     B,
   /* 0AB0 */     B,     O,     B,     B,     O,     B,     B,     B,     B,     B,     O,     O, CMBlw,     B,  VPst,  VPre,
   /* 0AC0 */  VPst,  VBlw,  VBlw,  VBlw,  VBlw,  VAbv,     O,  VAbv,  VAbv,  VAbv,     O,  VPst,  VPst,     H,     O,     O,
   /* 0AD0 */     O,     O,     O,     O,     O,     O,     O,     O,     O,     O,     O,     O,     O,     O,     O,     O,
-  /* 0AE0 */    IV,    IV,  VBlw,  VBlw,     O,     O,     B,     B,     B,     B,     B,     B,     B,     B,     B,     B,
+  /* 0AE0 */     B,     B,  VBlw,  VBlw,     O,     O,     B,     B,     B,     B,     B,     B,     B,     B,     B,     B,
   /* 0AF0 */     O,     O,     O,     O,     O,     O,     O,     O,     O,     B,     O,     O,     O,     O,     O,     O,
 
   /* Oriya */
 
-  /* 0B00 */     O, VMAbv, VMPst, VMPst,     O,    IV,    IV,    IV,    IV,    IV,    IV,    IV,    IV,     O,     O,    IV,
-  /* 0B10 */    IV,     O,     O,    IV,    IV,     B,     B,     B,     B,     B,     B,     B,     B,     B,     B,     B,
+  /* 0B00 */     O, VMAbv, VMPst, VMPst,     O,     B,     B,     B,     B,     B,     B,     B,     B,     O,     O,     B,
+  /* 0B10 */     B,     O,     O,     B,     B,     B,     B,     B,     B,     B,     B,     B,     B,     B,     B,     B,
   /* 0B20 */     B,     B,     B,     B,     B,     B,     B,     B,     B,     O,     B,     B,     B,     B,     B,     B,
   /* 0B30 */     B,     O,     B,     B,     O,     B,     B,     B,     B,     B,     O,     O, CMBlw,     B,  VPst,  VAbv,
   /* 0B40 */  VPst,  VBlw,  VBlw,  VBlw,  VBlw,     O,     O,  VPre,  VPre,     O,     O,  VPre,  VPre,     H,     O,     O,
   /* 0B50 */     O,     O,     O,     O,     O,     O,  VAbv,  VAbv,     O,     O,     O,     O,     B,     B,     O,     B,
-  /* 0B60 */    IV,    IV,  VBlw,  VBlw,     O,     O,     B,     B,     B,     B,     B,     B,     B,     B,     B,     B,
+  /* 0B60 */     B,     B,  VBlw,  VBlw,     O,     O,     B,     B,     B,     B,     B,     B,     B,     B,     B,     B,
   /* 0B70 */     O,     B,     O,     O,     O,     O,     O,     O,     O,     O,     O,     O,     O,     O,     O,     O,
 
   /* Tamil */
 
-  /* 0B80 */     O,     O, VMAbv,   IND,     O,    IV,    IV,    IV,    IV,    IV,    IV,     O,     O,     O,    IV,    IV,
-  /* 0B90 */    IV,     O,    IV,    IV,    IV,     B,     O,     O,     O,     B,     B,     O,     B,     O,     B,     B,
+  /* 0B80 */     O,     O, VMAbv,   IND,     O,     B,     B,     B,     B,     B,     B,     O,     O,     O,     B,     B,
+  /* 0B90 */     B,     O,     B,     B,     B,     B,     O,     O,     O,     B,     B,     O,     B,     O,     B,     B,
   /* 0BA0 */     O,     O,     O,     B,     B,     O,     O,     O,     B,     B,     B,     O,     O,     O,     B,     B,
   /* 0BB0 */     B,     B,     B,     B,     B,     B,     B,     B,     B,     B,     O,     O,     O,     O,  VPst,  VPst,
   /* 0BC0 */  VAbv,  VPst,  VPst,     O,     O,     O,  VPre,  VPre,  VPre,     O,  VPre,  VPre,  VPre,     H,     O,     O,
@@ -146,41 +145,41 @@
 
   /* Telugu */
 
-  /* 0C00 */ VMAbv, VMPst, VMPst, VMPst,     O,    IV,    IV,    IV,    IV,    IV,    IV,    IV,    IV,     O,    IV,    IV,
-  /* 0C10 */    IV,     O,    IV,    IV,    IV,     B,     B,     B,     B,     B,     B,     B,     B,     B,     B,     B,
+  /* 0C00 */ VMAbv, VMPst, VMPst, VMPst,     O,     B,     B,     B,     B,     B,     B,     B,     B,     O,     B,     B,
+  /* 0C10 */     B,     O,     B,     B,     B,     B,     B,     B,     B,     B,     B,     B,     B,     B,     B,     B,
   /* 0C20 */     B,     B,     B,     B,     B,     B,     B,     B,     B,     O,     B,     B,     B,     B,     B,     B,
   /* 0C30 */     B,     B,     B,     B,     B,     B,     B,     B,     B,     B,     O,     O,     O,     B,  VAbv,  VAbv,
   /* 0C40 */  VAbv,  VPst,  VPst,  VPst,  VPst,     O,  VAbv,  VAbv,  VAbv,     O,  VAbv,  VAbv,  VAbv,     H,     O,     O,
   /* 0C50 */     O,     O,     O,     O,     O,  VAbv,  VBlw,     O,     B,     B,     B,     O,     O,     O,     O,     O,
-  /* 0C60 */    IV,    IV,  VBlw,  VBlw,     O,     O,     B,     B,     B,     B,     B,     B,     B,     B,     B,     B,
+  /* 0C60 */     B,     B,  VBlw,  VBlw,     O,     O,     B,     B,     B,     B,     B,     B,     B,     B,     B,     B,
   /* 0C70 */     O,     O,     O,     O,     O,     O,     O,     O,     O,     O,     O,     O,     O,     O,     O,     O,
 
   /* Kannada */
 
-  /* 0C80 */     O, VMAbv, VMPst, VMPst,     O,    IV,    IV,    IV,    IV,    IV,    IV,    IV,    IV,     O,    IV,    IV,
-  /* 0C90 */    IV,     O,    IV,    IV,    IV,     B,     B,     B,     B,     B,     B,     B,     B,     B,     B,     B,
+  /* 0C80 */     O, VMAbv, VMPst, VMPst,     O,     B,     B,     B,     B,     B,     B,     B,     B,     O,     B,     B,
+  /* 0C90 */     B,     O,     B,     B,     B,     B,     B,     B,     B,     B,     B,     B,     B,     B,     B,     B,
   /* 0CA0 */     B,     B,     B,     B,     B,     B,     B,     B,     B,     O,     B,     B,     B,     B,     B,     B,
   /* 0CB0 */     B,     B,     B,     B,     O,     B,     B,     B,     B,     B,     O,     O, CMBlw,     B,  VPst,  VAbv,
   /* 0CC0 */  VAbv,  VPst,  VPst,  VPst,  VPst,     O,  VAbv,  VAbv,  VAbv,     O,  VAbv,  VAbv,  VAbv,     H,     O,     O,
   /* 0CD0 */     O,     O,     O,     O,     O,  VPst,  VPst,     O,     O,     O,     O,     O,     O,     O,     B,     O,
-  /* 0CE0 */    IV,    IV,  VBlw,  VBlw,     O,     O,     B,     B,     B,     B,     B,     B,     B,     B,     B,     B,
+  /* 0CE0 */     B,     B,  VBlw,  VBlw,     O,     O,     B,     B,     B,     B,     B,     B,     B,     B,     B,     B,
   /* 0CF0 */     O,     R,     R,     O,     O,     O,     O,     O,     O,     O,     O,     O,     O,     O,     O,     O,
 
   /* Malayalam */
 
-  /* 0D00 */     O, VMAbv, VMPst, VMPst,     O,    IV,    IV,    IV,    IV,    IV,    IV,    IV,    IV,     O,    IV,    IV,
-  /* 0D10 */    IV,     O,    IV,    IV,    IV,     B,     B,     B,     B,     B,     B,     B,     B,     B,     B,     B,
+  /* 0D00 */     O, VMAbv, VMPst, VMPst,     O,     B,     B,     B,     B,     B,     B,     B,     B,     O,     B,     B,
+  /* 0D10 */     B,     O,     B,     B,     B,     B,     B,     B,     B,     B,     B,     B,     B,     B,     B,     B,
   /* 0D20 */     B,     B,     B,     B,     B,     B,     B,     B,     B,     B,     B,     B,     B,     B,     B,     B,
   /* 0D30 */     B,     B,     B,     B,     B,     B,     B,     B,     B,     B,     B,     O,     O,     B,  VPst,  VPst,
   /* 0D40 */  VPst,  VPst,  VPst,  VBlw,  VBlw,     O,  VPre,  VPre,  VPre,     O,  VPre,  VPre,  VPre,     H,     R,     O,
-  /* 0D50 */     O,     O,     O,     O,     O,     O,     O,  VPst,     O,     O,     O,     O,     O,     O,     O,    IV,
-  /* 0D60 */    IV,    IV,  VBlw,  VBlw,     O,     O,     B,     B,     B,     B,     B,     B,     B,     B,     B,     B,
+  /* 0D50 */     O,     O,     O,     O,   IND,   IND,   IND,  VPst,     O,     O,     O,     O,     O,     O,     O,     B,
+  /* 0D60 */     B,     B,  VBlw,  VBlw,     O,     O,     B,     B,     B,     B,     B,     B,     B,     B,     B,     B,
   /* 0D70 */     O,     O,     O,     O,     O,     O,     O,     O,     O,     O,   IND,   IND,   IND,   IND,   IND,   IND,
 
   /* Sinhala */
 
-  /* 0D80 */     O,     O, VMPst, VMPst,     O,    IV,    IV,    IV,    IV,    IV,    IV,    IV,    IV,    IV,    IV,    IV,
-  /* 0D90 */    IV,    IV,    IV,    IV,    IV,    IV,    IV,     O,     O,     O,     B,     B,     B,     B,     B,     B,
+  /* 0D80 */     O,     O, VMPst, VMPst,     O,     B,     B,     B,     B,     B,     B,     B,     B,     B,     B,     B,
+  /* 0D90 */     B,     B,     B,     B,     B,     B,     B,     O,     O,     O,     B,     B,     B,     B,     B,     B,
   /* 0DA0 */     B,     B,     B,     B,     B,     B,     B,     B,     B,     B,     B,     B,     B,     B,     B,     B,
   /* 0DB0 */     B,     B,     O,     B,     B,     B,     B,     B,     B,     B,     B,     B,     O,     B,     O,     O,
   /* 0DC0 */     B,     B,     B,     B,     B,     B,     B,     O,     O,     O,     H,     O,     O,     O,     O,  VPst,
@@ -195,10 +194,10 @@
 
   /* 1000 */     B,     B,     B,     B,     B,     B,     B,     B,     B,     B,     B,     B,     B,     B,     B,     B,
   /* 1010 */     B,     B,     B,     B,     B,     B,     B,     B,     B,     B,     B,     B,     B,     B,     B,     B,
-  /* 1020 */     B,    IV,    IV,    IV,    IV,    IV,    IV,    IV,    IV,    IV,    IV,  VPst,  VPst,  VAbv,  VAbv,  VBlw,
+  /* 1020 */     B,     B,     B,     B,     B,     B,     B,     B,     B,     B,     B,  VPst,  VPst,  VAbv,  VAbv,  VBlw,
   /* 1030 */  VBlw,  VPre,  VAbv,  VAbv,  VAbv,  VAbv, VMAbv, VMBlw, VMPst,     H,  VAbv,  MPst,  MPre,  MBlw,  MBlw,     B,
   /* 1040 */     B,     B,     B,     B,     B,     B,     B,     B,     B,     B,     O,     O,     O,     O,    GB,     O,
-  /* 1050 */     B,     B,    IV,    IV,    IV,    IV,  VPst,  VPst,  VBlw,  VBlw,     B,     B,     B,     B,  MBlw,  MBlw,
+  /* 1050 */     B,     B,     B,     B,     B,     B,  VPst,  VPst,  VBlw,  VBlw,     B,     B,     B,     B,  MBlw,  MBlw,
   /* 1060 */  MBlw,     B,  VPst, VMPst, VMPst,     B,     B,  VPst,  VPst, VMPst, VMPst, VMPst, VMPst, VMPst,     B,     B,
   /* 1070 */     B,  VAbv,  VAbv,  VAbv,  VAbv,     B,     B,     B,     B,     B,     B,     B,     B,     B,     B,     B,
   /* 1080 */     B,     B,  MBlw,  VPst,  VPre,  VAbv,  VAbv, VMPst, VMPst, VMPst, VMPst, VMPst, VMPst, VMBlw,     B, VMPst,
@@ -209,22 +208,22 @@
 
   /* Tagalog */
 
-  /* 1700 */    IV,    IV,    IV,     B,     B,     B,     B,     B,     B,     B,     B,     B,     B,     O,     B,     B,
+  /* 1700 */     B,     B,     B,     B,     B,     B,     B,     B,     B,     B,     B,     B,     B,     O,     B,     B,
   /* 1710 */     B,     B,  VAbv,  VBlw,  VBlw,     O,     O,     O,     O,     O,     O,     O,     O,     O,     O,     O,
 
   /* Hanunoo */
 
-  /* 1720 */    IV,    IV,    IV,     B,     B,     B,     B,     B,     B,     B,     B,     B,     B,     B,     B,     B,
+  /* 1720 */     B,     B,     B,     B,     B,     B,     B,     B,     B,     B,     B,     B,     B,     B,     B,     B,
   /* 1730 */     B,     B,  VAbv,  VBlw,  VBlw,     O,     O,     O,     O,     O,     O,     O,     O,     O,     O,     O,
 
   /* Buhid */
 
-  /* 1740 */    IV,    IV,    IV,     B,     B,     B,     B,     B,     B,     B,     B,     B,     B,     B,     B,     B,
+  /* 1740 */     B,     B,     B,     B,     B,     B,     B,     B,     B,     B,     B,     B,     B,     B,     B,     B,
   /* 1750 */     B,     B,  VAbv,  VBlw,     O,     O,     O,     O,     O,     O,     O,     O,     O,     O,     O,     O,
 
   /* Tagbanwa */
 
-  /* 1760 */    IV,    IV,    IV,     B,     B,     B,     B,     B,     B,     B,     B,     B,     B,     O,     B,     B,
+  /* 1760 */     B,     B,     B,     B,     B,     B,     B,     B,     B,     B,     B,     B,     B,     O,     B,     B,
   /* 1770 */     B,     O,  VAbv,  VBlw,     O,     O,     O,     O,     O,     O,     O,     O,     O,     O,     O,     O,
 
   /* Khmer */
@@ -231,8 +230,8 @@
 
   /* 1780 */     B,     B,     B,     B,     B,     B,     B,     B,     B,     B,     B,     B,     B,     B,     B,     B,
   /* 1790 */     B,     B,     B,     B,     B,     B,     B,     B,     B,     B,     B,     B,     B,     B,     B,     B,
-  /* 17A0 */     B,     B,     B,    IV,    IV,    IV,    IV,    IV,    IV,    IV,    IV,    IV,    IV,    IV,    IV,    IV,
-  /* 17B0 */    IV,    IV,    IV,    IV,     O,     O,  VPst,  VAbv,  VAbv,  VAbv,  VAbv,  VBlw,  VBlw,  VBlw,  VPre,  VPre,
+  /* 17A0 */     B,     B,     B,     B,     B,     B,     B,     B,     B,     B,     B,     B,     B,     B,     B,     B,
+  /* 17B0 */     B,     B,     B,     B,     O,     O,  VPst,  VAbv,  VAbv,  VAbv,  VAbv,  VBlw,  VBlw,  VBlw,  VPre,  VPre,
   /* 17C0 */  VPre,  VPre,  VPre,  VPre,  VPre,  VPre, VMAbv, VMPst,  VPst, VMAbv, VMAbv,    FM,  FAbv, CMAbv,    FM,    FM,
   /* 17D0 */    FM,  VAbv,     H,    FM,     O,     O,     O,     O,     O,     O,     O,     O,     B,  VAbv,     O,     O,
   /* 17E0 */     B,     B,     B,     B,     B,     B,     B,     B,     B,     B,     O,     O,     O,     O,     O,     O,
@@ -274,8 +273,8 @@
 
   /* 1A20 */     B,     B,     B,     B,     B,     B,     B,     B,     B,     B,     B,     B,     B,     B,     B,     B,
   /* 1A30 */     B,     B,     B,     B,     B,     B,     B,     B,     B,     B,     B,     B,     B,     B,     B,     B,
-  /* 1A40 */     B,     B,     B,     B,     B,     B,     B,     B,     B,     B,     B,     B,     B,    IV,    IV,    IV,
-  /* 1A50 */    IV,    IV,    IV,     B,     B,  MPre,  MBlw,  FPst,  FAbv,  FAbv,  FAbv,  FBlw,  FBlw,  FBlw,  FBlw,     O,
+  /* 1A40 */     B,     B,     B,     B,     B,     B,     B,     B,     B,     B,     B,     B,     B,     B,     B,     B,
+  /* 1A50 */     B,     B,     B,     B,     B,  MPre,  MBlw,  FPst,  FAbv,  FAbv,  FAbv,  FBlw,  FBlw,  FBlw,  FBlw,     O,
   /* 1A60 */     H,  VPst,  VAbv,  VPst,  VPst,  VAbv,  VAbv,  VAbv,  VAbv,  VBlw,  VBlw,  VAbv,  VBlw,  VPst,  VPre,  VPre,
   /* 1A70 */  VPre,  VPre,  VPre,  VAbv,  VAbv, VMAbv, VMAbv, VMAbv, VMAbv, VMAbv,    FM,    FM,    FM,     O,     O,    FM,
   /* 1A80 */     B,     B,     B,     B,     B,     B,     B,     B,     B,     B,     O,     O,     O,     O,     O,     O,
@@ -286,8 +285,8 @@
 
   /* Balinese */
 
-  /* 1B00 */ VMAbv, VMAbv, VMAbv,  FAbv, VMPst,    IV,    IV,    IV,    IV,    IV,    IV,    IV,    IV,    IV,    IV,    IV,
-  /* 1B10 */    IV,    IV,    IV,     B,     B,     B,     B,     B,     B,     B,     B,     B,     B,     B,     B,     B,
+  /* 1B00 */ VMAbv, VMAbv, VMAbv,  FAbv, VMPst,     B,     B,     B,     B,     B,     B,     B,     B,     B,     B,     B,
+  /* 1B10 */     B,     B,     B,     B,     B,     B,     B,     B,     B,     B,     B,     B,     B,     B,     B,     B,
   /* 1B20 */     B,     B,     B,     B,     B,     B,     B,     B,     B,     B,     B,     B,     B,     B,     B,     B,
   /* 1B30 */     B,     B,     B,     B, CMAbv,  VPst,  VAbv,  VAbv,  VBlw,  VBlw,  VBlw,  VBlw,  VAbv,  VAbv,  VPre,  VPre,
   /* 1B40 */  VPre,  VPre,  VAbv,  VAbv,     H,     B,     B,     B,     B,     B,     B,     B,     O,     O,     O,     O,
@@ -297,7 +296,7 @@
 
   /* Sundanese */
 
-  /* 1B80 */ VMAbv,  FAbv, VMPst,    IV,    IV,    IV,    IV,    IV,    IV,    IV,     B,     B,     B,     B,     B,     B,
+  /* 1B80 */ VMAbv,  FAbv, VMPst,     B,     B,     B,     B,     B,     B,     B,     B,     B,     B,     B,     B,     B,
   /* 1B90 */     B,     B,     B,     B,     B,     B,     B,     B,     B,     B,     B,     B,     B,     B,     B,     B,
   /* 1BA0 */     B,   SUB,   SUB,   SUB,  VAbv,  VBlw,  VPre,  VPst,  VAbv,  VAbv,  VPst,     H,   SUB,   SUB,     B,     B,
   /* 1BB0 */     B,     B,     B,     B,     B,     B,     B,     B,     B,     B,     B,     B,     B,     B,     B,     B,
@@ -306,7 +305,7 @@
 
   /* 1BC0 */     B,     B,     B,     B,     B,     B,     B,     B,     B,     B,     B,     B,     B,     B,     B,     B,
   /* 1BD0 */     B,     B,     B,     B,     B,     B,     B,     B,     B,     B,     B,     B,     B,     B,     B,     B,
-  /* 1BE0 */     B,     B,     B,     B,    IV,    IV, CMAbv,  VPst,  VAbv,  VAbv,  VPst,  VPst,  VPst,  VAbv,  VPst,  VAbv,
+  /* 1BE0 */     B,     B,     B,     B,     B,     B, CMAbv,  VPst,  VAbv,  VAbv,  VPst,  VPst,  VPst,  VAbv,  VPst,  VAbv,
   /* 1BF0 */  FAbv,  FAbv,  VPst,  VPst,     O,     O,     O,     O,     O,     O,     O,     O,     O,     O,     O,     O,
 
   /* Lepcha */
@@ -326,14 +325,20 @@
   /* 1CE0 */ VMAbv, VMPst, VMBlw, VMBlw, VMBlw, VMBlw, VMBlw, VMBlw, VMBlw,     O,     O,     O,     O, VMBlw,     O,     O,
   /* 1CF0 */     O,     O, VMPst, VMPst, VMAbv,     O,     O,     O, VMAbv, VMAbv,     O,     O,     O,     O,     O,     O,
 
-#define use_offset_0x2008u 2552
+#define use_offset_0x1df8u 2552
 
 
+  /* Combining Diacritical Marks Supplement */
+                                                                         O,     O,     O,    FM,     O,     O,     O,     O,
+
+#define use_offset_0x2008u 2560
+
+
   /* General Punctuation */
                                                                          O,     O,     O,     O,  ZWNJ,   ZWJ,     O,     O,
   /* 2010 */    GB,    GB,    GB,    GB,    GB,     O,     O,     O,
 
-#define use_offset_0x2060u 2568
+#define use_offset_0x2060u 2576
 
   /* 2060 */    WJ,     O,     O,     O,     O,     O,     O,     O,     O,     O,     O,     O,     O,     O,     O,     O,
 
@@ -342,12 +347,12 @@
   /* 2070 */     O,     O,     O,     O,    FM,     O,     O,     O,     O,     O,     O,     O,     O,     O,     O,     O,
   /* 2080 */     O,     O,    FM,    FM,    FM,     O,     O,     O,
 
-#define use_offset_0xa800u 2608
+#define use_offset_0xa800u 2616
 
 
   /* Syloti Nagri */
 
-  /* A800 */    IV,    IV,     O,    IV,    IV,    IV,  VAbv,     B,     B,     B,     B, VMAbv,     B,     B,     B,     B,
+  /* A800 */     B,     B,     O,     B,     B,     B,  VAbv,     B,     B,     B,     B, VMAbv,     B,     B,     B,     B,
   /* A810 */     B,     B,     B,     B,     B,     B,     B,     B,     B,     B,     B,     B,     B,     B,     B,     B,
   /* A820 */     B,     B,     B,  VPst,  VPst,  VBlw,  VAbv,  VPst,     O,     O,     O,     O,     O,     O,     O,     O,
   /* A830 */     O,     O,     O,     O,     O,     O,     O,     O,     O,     O,     O,     O,     O,     O,     O,     O,
@@ -361,11 +366,11 @@
 
   /* Saurashtra */
 
-  /* A880 */ VMPst, VMPst,    IV,    IV,    IV,    IV,    IV,    IV,    IV,    IV,    IV,    IV,    IV,    IV,    IV,    IV,
-  /* A890 */    IV,    IV,     B,     B,     B,     B,     B,     B,     B,     B,     B,     B,     B,     B,     B,     B,
+  /* A880 */ VMPst, VMPst,     B,     B,     B,     B,     B,     B,     B,     B,     B,     B,     B,     B,     B,     B,
+  /* A890 */     B,     B,     B,     B,     B,     B,     B,     B,     B,     B,     B,     B,     B,     B,     B,     B,
   /* A8A0 */     B,     B,     B,     B,     B,     B,     B,     B,     B,     B,     B,     B,     B,     B,     B,     B,
   /* A8B0 */     B,     B,     B,     B,  FPst,  VPst,  VPst,  VPst,  VPst,  VPst,  VPst,  VPst,  VPst,  VPst,  VPst,  VPst,
-  /* A8C0 */  VPst,  VPst,  VPst,  VPst,     H,     O,     O,     O,     O,     O,     O,     O,     O,     O,     O,     O,
+  /* A8C0 */  VPst,  VPst,  VPst,  VPst,     H, VMAbv,     O,     O,     O,     O,     O,     O,     O,     O,     O,     O,
   /* A8D0 */     B,     B,     B,     B,     B,     B,     B,     B,     B,     B,     O,     O,     O,     O,     O,     O,
 
   /* Devanagari Extended */
@@ -389,7 +394,7 @@
 
   /* Javanese */
 
-  /* A980 */ VMAbv, VMAbv,  FAbv, VMPst,    IV,    IV,    IV,    IV,    IV,     B,     B,     B,    IV,    IV,    IV,     B,
+  /* A980 */ VMAbv, VMAbv,  FAbv, VMPst,     B,     B,     B,     B,     B,     B,     B,     B,     B,     B,     B,     B,
   /* A990 */     B,     B,     B,     B,     B,     B,     B,     B,     B,     B,     B,     B,     B,     B,     B,     B,
   /* A9A0 */     B,     B,     B,     B,     B,     B,     B,     B,     B,     B,     B,     B,     B,     B,     B,     B,
   /* A9B0 */     B,     B,     B, CMAbv,  VPst,  VPst,  VAbv,  VAbv,  VBlw,  VBlw,  VPre,  VPre,  VAbv,   SUB,  MPst,  MPst,
@@ -403,7 +408,7 @@
 
   /* Cham */
 
-  /* AA00 */    IV,    IV,    IV,    IV,    IV,    IV,     B,     B,     B,     B,     B,     B,     B,     B,     B,     B,
+  /* AA00 */     B,     B,     B,     B,     B,     B,     B,     B,     B,     B,     B,     B,     B,     B,     B,     B,
   /* AA10 */     B,     B,     B,     B,     B,     B,     B,     B,     B,     B,     B,     B,     B,     B,     B,     B,
   /* AA20 */     B,     B,     B,     B,     B,     B,     B,     B,     B,  VAbv,  VAbv,  VAbv,  VAbv,  VBlw,  VAbv,  VPre,
   /* AA30 */  VPre,  VAbv,  VBlw,  MPst,  MPre,  MBlw,  MBlw,     O,     O,     O,     O,     O,     O,     O,     O,     O,
@@ -413,7 +418,7 @@
   /* Myanmar Extended-A */
 
   /* AA60 */     B,     B,     B,     B,     B,     B,     B,     B,     B,     B,     B,     B,     B,     B,     B,     B,
-  /* AA70 */     O,     B,     B,     B,     O,     O,     O,     O,     O,     O,     B, VMPst, VMAbv, VMPst,     B,     B,
+  /* AA70 */     O,     B,     B,     B,    GB,    GB,    GB,     O,     O,     O,     B, VMPst, VMAbv, VMPst,     B,     B,
 
   /* Tai Viet */
 
@@ -426,20 +431,20 @@
 
   /* Meetei Mayek Extensions */
 
-  /* AAE0 */    IV,    IV,     B,     B,     B,     B,     B,     B,     B,     B,     B,  VPre,  VBlw,  VAbv,  VPre,  VPst,
+  /* AAE0 */     B,     B,     B,     B,     B,     B,     B,     B,     B,     B,     B,  VPre,  VBlw,  VAbv,  VPre,  VPst,
   /* AAF0 */     O,     O,     O,     O,     O, VMPst,     H,     O,
 
-#define use_offset_0xabc0u 3368
+#define use_offset_0xabc0u 3376
 
 
   /* Meetei Mayek */
 
-  /* ABC0 */     B,     B,     B,     B,     B,     B,     B,     B,     B,     B,     B,     B,     B,     B,    IV,    IV,
-  /* ABD0 */     B,    IV,     B,     B,     B,     B,     B,     B,     B,     B,     B,     B,     B,     B,     B,     B,
+  /* ABC0 */     B,     B,     B,     B,     B,     B,     B,     B,     B,     B,     B,     B,     B,     B,     B,     B,
+  /* ABD0 */     B,     B,     B,     B,     B,     B,     B,     B,     B,     B,     B,     B,     B,     B,     B,     B,
   /* ABE0 */     B,     B,     B,  VPst,  VPst,  VAbv,  VPst,  VPst,  VBlw,  VPst,  VPst,     O, VMPst,  VBlw,     O,     O,
   /* ABF0 */     B,     B,     B,     B,     B,     B,     B,     B,     B,     B,     O,     O,     O,     O,     O,     O,
 
-#define use_offset_0xfe00u 3432
+#define use_offset_0xfe00u 3440
 
 
   /* Variation Selectors */
@@ -446,7 +451,7 @@
 
   /* FE00 */    VS,    VS,    VS,    VS,    VS,    VS,    VS,    VS,    VS,    VS,    VS,    VS,    VS,    VS,    VS,    VS,
 
-#define use_offset_0x10a00u 3448
+#define use_offset_0x10a00u 3456
 
 
   /* Kharoshthi */
@@ -457,13 +462,13 @@
   /* 10A30 */     B,     B,     B,     B,     O,     O,     O,     O, CMAbv, CMBlw, CMBlw,     O,     O,     O,     O,     H,
   /* 10A40 */     B,     B,     B,     B,     B,     B,     B,     B,
 
-#define use_offset_0x11000u 3520
+#define use_offset_0x11000u 3528
 
 
   /* Brahmi */
 
-  /* 11000 */ VMPst, VMAbv, VMPst,     R,     R,    IV,    IV,    IV,    IV,    IV,    IV,    IV,    IV,    IV,    IV,    IV,
-  /* 11010 */    IV,    IV,    IV,     B,     B,     B,     B,     B,     B,     B,     B,     B,     B,     B,     B,     B,
+  /* 11000 */ VMPst, VMAbv, VMPst,     R,     R,     B,     B,     B,     B,     B,     B,     B,     B,     B,     B,     B,
+  /* 11010 */     B,     B,     B,     B,     B,     B,     B,     B,     B,     B,     B,     B,     B,     B,     B,     B,
   /* 11020 */     B,     B,     B,     B,     B,     B,     B,     B,     B,     B,     B,     B,     B,     B,     B,     B,
   /* 11030 */     B,     B,     B,     B,     B,     B,     B,     B,  VAbv,  VAbv,  VAbv,  VAbv,  VBlw,  VBlw,  VBlw,  VBlw,
   /* 11040 */  VBlw,  VBlw,  VAbv,  VAbv,  VAbv,  VAbv,     H,     O,     O,     O,     O,     O,     O,     O,     O,     O,
@@ -473,17 +478,17 @@
 
   /* Kaithi */
 
-  /* 11080 */ VMAbv, VMAbv, VMPst,    IV,    IV,    IV,    IV,    IV,    IV,    IV,    IV,    IV,    IV,     B,     B,     B,
+  /* 11080 */ VMAbv, VMAbv, VMPst,     B,     B,     B,     B,     B,     B,     B,     B,     B,     B,     B,     B,     B,
   /* 11090 */     B,     B,     B,     B,     B,     B,     B,     B,     B,     B,     B,     B,     B,     B,     B,     B,
   /* 110A0 */     B,     B,     B,     B,     B,     B,     B,     B,     B,     B,     B,     B,     B,     B,     B,     B,
   /* 110B0 */  VPst,  VPre,  VPst,  VBlw,  VBlw,  VAbv,  VAbv,  VPst,  VPst,     H, CMBlw,     O,     O,     O,     O,     O,
 
-#define use_offset_0x11100u 3712
+#define use_offset_0x11100u 3720
 
 
   /* Chakma */
 
-  /* 11100 */ VMAbv, VMAbv, VMAbv,    IV,    IV,    IV,    IV,     B,     B,     B,     B,     B,     B,     B,     B,     B,
+  /* 11100 */ VMAbv, VMAbv, VMAbv,     B,     B,     B,     B,     B,     B,     B,     B,     B,     B,     B,     B,     B,
   /* 11110 */     B,     B,     B,     B,     B,     B,     B,     B,     B,     B,     B,     B,     B,     B,     B,     B,
   /* 11120 */     B,     B,     B,     B,     B,     B,     B,  VAbv,  VAbv,  VAbv,  VBlw,  VBlw,  VPre,  VAbv,  VAbv,  VAbv,
   /* 11130 */  VAbv,  VBlw,  VBlw,     H,  VAbv,     O,     B,     B,     B,     B,     B,     B,     B,     B,     B,     B,
@@ -497,8 +502,8 @@
 
   /* Sharada */
 
-  /* 11180 */ VMAbv, VMAbv, VMPst,    IV,    IV,    IV,    IV,    IV,    IV,    IV,    IV,    IV,    IV,    IV,    IV,    IV,
-  /* 11190 */    IV,     B,     B,     B,     B,     B,     B,     B,     B,     B,     B,     B,     B,     B,     B,     B,
+  /* 11180 */ VMAbv, VMAbv, VMPst,     B,     B,     B,     B,     B,     B,     B,     B,     B,     B,     B,     B,     B,
+  /* 11190 */     B,     B,     B,     B,     B,     B,     B,     B,     B,     B,     B,     B,     B,     B,     B,     B,
   /* 111A0 */     B,     B,     B,     B,     B,     B,     B,     B,     B,     B,     B,     B,     B,     B,     B,     B,
   /* 111B0 */     B,     B,     B,  VPst,  VPre,  VPst,  VBlw,  VBlw,  VBlw,  VBlw,  VBlw,  VBlw,  VAbv,  VAbv,  VAbv,  VAbv,
   /* 111C0 */     H,     B,     R,     R,     O,     O,     O,     O,     O,     O, CMBlw,  VAbv,  VBlw,     O,     O,     O,
@@ -511,23 +516,23 @@
 
   /* Khojki */
 
-  /* 11200 */    IV,    IV,    IV,    IV,    IV,    IV,    IV,    IV,     B,     B,     B,     B,     B,     B,     B,     B,
+  /* 11200 */     B,     B,     B,     B,     B,     B,     B,     B,     B,     B,     B,     B,     B,     B,     B,     B,
   /* 11210 */     B,     B,     O,     B,     B,     B,     B,     B,     B,     B,     B,     B,     B,     B,     B,     B,
   /* 11220 */     B,     B,     B,     B,     B,     B,     B,     B,     B,     B,     B,     B,  VPst,  VPst,  VPst,  VBlw,
-  /* 11230 */  VAbv,  VAbv,  VAbv,  VAbv, VMAbv,     H, CMAbv, CMAbv,
+  /* 11230 */  VAbv,  VAbv,  VAbv,  VAbv, VMAbv,     H, CMAbv, CMAbv,     O,     O,     O,     O,     O,     O, VMAbv,     O,
 
-#define use_offset_0x11280u 4024
+#define use_offset_0x11280u 4040
 
 
   /* Multani */
 
-  /* 11280 */    IV,    IV,    IV,    IV,     B,     B,     B,     O,     B,     O,     B,     B,     B,     B,     O,     B,
+  /* 11280 */     B,     B,     B,     B,     B,     B,     B,     O,     B,     O,     B,     B,     B,     B,     O,     B,
   /* 11290 */     B,     B,     B,     B,     B,     B,     B,     B,     B,     B,     B,     B,     B,     B,     O,     B,
   /* 112A0 */     B,     B,     B,     B,     B,     B,     B,     B,     B,     O,     O,     O,     O,     O,     O,     O,
 
   /* Khudawadi */
 
-  /* 112B0 */    IV,    IV,    IV,    IV,    IV,    IV,    IV,    IV,    IV,    IV,     B,     B,     B,     B,     B,     B,
+  /* 112B0 */     B,     B,     B,     B,     B,     B,     B,     B,     B,     B,     B,     B,     B,     B,     B,     B,
   /* 112C0 */     B,     B,     B,     B,     B,     B,     B,     B,     B,     B,     B,     B,     B,     B,     B,     B,
   /* 112D0 */     B,     B,     B,     B,     B,     B,     B,     B,     B,     B,     B,     B,     B,     B,     B, VMAbv,
   /* 112E0 */  VPst,  VPre,  VPst,  VBlw,  VBlw,  VAbv,  VAbv,  VAbv,  VAbv, CMBlw,  VBlw,     O,     O,     O,     O,     O,
@@ -535,21 +540,32 @@
 
   /* Grantha */
 
-  /* 11300 */ VMAbv, VMAbv, VMPst, VMPst,     O,    IV,    IV,    IV,    IV,    IV,    IV,    IV,    IV,     O,     O,    IV,
-  /* 11310 */    IV,     O,     O,    IV,    IV,     B,     B,     B,     B,     B,     B,     B,     B,     B,     B,     B,
+  /* 11300 */ VMAbv, VMAbv, VMPst, VMPst,     O,     B,     B,     B,     B,     B,     B,     B,     B,     O,     O,     B,
+  /* 11310 */     B,     O,     O,     B,     B,     B,     B,     B,     B,     B,     B,     B,     B,     B,     B,     B,
   /* 11320 */     B,     B,     B,     B,     B,     B,     B,     B,     B,     O,     B,     B,     B,     B,     B,     B,
   /* 11330 */     B,     O,     B,     B,     O,     B,     B,     B,     B,     B,     O,     O, CMBlw,     B,  VPst,  VPst,
   /* 11340 */  VAbv,  VPst,  VPst,  VPst,  VPst,     O,     O,  VPre,  VPre,     O,     O,  VPre,  VPre,     H,     O,     O,
   /* 11350 */     O,     O,     O,     O,     O,     O,     O,  VPst,     O,     O,     O,     O,     O,     O,     O,     O,
-  /* 11360 */    IV,    IV,  VPst,  VPst,     O,     O, VMAbv, VMAbv, VMAbv, VMAbv, VMAbv, VMAbv, VMAbv,     O,     O,     O,
+  /* 11360 */     B,     B,  VPst,  VPst,     O,     O, VMAbv, VMAbv, VMAbv, VMAbv, VMAbv, VMAbv, VMAbv,     O,     O,     O,
   /* 11370 */ VMAbv, VMAbv, VMAbv, VMAbv, VMAbv,     O,     O,     O,
 
-#define use_offset_0x11480u 4272
+#define use_offset_0x11400u 4288
 
 
+  /* Newa */
+
+  /* 11400 */     B,     B,     B,     B,     B,     B,     B,     B,     B,     B,     B,     B,     B,     B,     B,     B,
+  /* 11410 */     B,     B,     B,     B,     B,     B,     B,     B,     B,     B,     B,     B,     B,     B,     B,     B,
+  /* 11420 */     B,     B,     B,     B,     B,     B,     B,     B,     B,     B,     B,     B,     B,     B,     B,     B,
+  /* 11430 */     B,     B,     B,     B,     B,  VPst,  VPre,  VPst,  VBlw,  VBlw,  VBlw,  VBlw,  VBlw,  VBlw,  VAbv,  VAbv,
+  /* 11440 */  VPst,  VPst,     H, VMAbv, VMAbv, VMPst, CMBlw,     B,     O,     O,     O,     O,     O,     O,     O,     O,
+  /* 11450 */     B,     B,     B,     B,     B,     B,     B,     B,     B,     B,     O,     O,     O,     O,     O,     O,
+  /* 11460 */     O,     O,     O,     O,     O,     O,     O,     O,     O,     O,     O,     O,     O,     O,     O,     O,
+  /* 11470 */     O,     O,     O,     O,     O,     O,     O,     O,     O,     O,     O,     O,     O,     O,     O,     O,
+
   /* Tirhuta */
 
-  /* 11480 */     O,    IV,    IV,    IV,    IV,    IV,    IV,    IV,    IV,    IV,    IV,    IV,    IV,    IV,    IV,     B,
+  /* 11480 */     O,     B,     B,     B,     B,     B,     B,     B,     B,     B,     B,     B,     B,     B,     B,     B,
   /* 11490 */     B,     B,     B,     B,     B,     B,     B,     B,     B,     B,     B,     B,     B,     B,     B,     B,
   /* 114A0 */     B,     B,     B,     B,     B,     B,     B,     B,     B,     B,     B,     B,     B,     B,     B,     B,
   /* 114B0 */  VPst,  VPre,  VPst,  VBlw,  VBlw,  VBlw,  VBlw,  VBlw,  VBlw,  VPre,  VAbv,  VPre,  VPre,  VPst,  VPre, VMAbv,
@@ -556,23 +572,23 @@
   /* 114C0 */ VMAbv, VMPst,     H, CMBlw,     B,     O,     O,     O,     O,     O,     O,     O,     O,     O,     O,     O,
   /* 114D0 */     B,     B,     B,     B,     B,     B,     B,     B,     B,     B,     O,     O,     O,     O,     O,     O,
 
-#define use_offset_0x11580u 4368
+#define use_offset_0x11580u 4512
 
 
   /* Siddham */
 
-  /* 11580 */    IV,    IV,    IV,    IV,    IV,    IV,    IV,    IV,    IV,    IV,    IV,    IV,    IV,    IV,     B,     B,
+  /* 11580 */     B,     B,     B,     B,     B,     B,     B,     B,     B,     B,     B,     B,     B,     B,     B,     B,
   /* 11590 */     B,     B,     B,     B,     B,     B,     B,     B,     B,     B,     B,     B,     B,     B,     B,     B,
   /* 115A0 */     B,     B,     B,     B,     B,     B,     B,     B,     B,     B,     B,     B,     B,     B,     B,  VPst,
   /* 115B0 */  VPre,  VPst,  VBlw,  VBlw,  VBlw,  VBlw,     O,     O,  VPre,  VPre,  VPre,  VPre, VMAbv, VMAbv, VMPst,     H,
   /* 115C0 */ CMBlw,     O,     O,     O,     O,     O,     O,     O,     O,     O,     O,     O,     O,     O,     O,     O,
-  /* 115D0 */     O,     O,     O,     O,     O,     O,     O,     O,    IV,    IV,    IV,    IV,  VBlw,  VBlw,     O,     O,
+  /* 115D0 */     O,     O,     O,     O,     O,     O,     O,     O,     B,     B,     B,     B,  VBlw,  VBlw,     O,     O,
   /* 115E0 */     O,     O,     O,     O,     O,     O,     O,     O,     O,     O,     O,     O,     O,     O,     O,     O,
   /* 115F0 */     O,     O,     O,     O,     O,     O,     O,     O,     O,     O,     O,     O,     O,     O,     O,     O,
 
   /* Modi */
 
-  /* 11600 */    IV,    IV,    IV,    IV,    IV,    IV,    IV,    IV,    IV,    IV,    IV,    IV,    IV,    IV,     B,     B,
+  /* 11600 */     B,     B,     B,     B,     B,     B,     B,     B,     B,     B,     B,     B,     B,     B,     B,     B,
   /* 11610 */     B,     B,     B,     B,     B,     B,     B,     B,     B,     B,     B,     B,     B,     B,     B,     B,
   /* 11620 */     B,     B,     B,     B,     B,     B,     B,     B,     B,     B,     B,     B,     B,     B,     B,     B,
   /* 11630 */  VPst,  VPst,  VPst,  VBlw,  VBlw,  VBlw,  VBlw,  VBlw,  VBlw,  VAbv,  VAbv,  VPst,  VPst, VMAbv, VMPst,     H,
@@ -583,7 +599,7 @@
 
   /* Takri */
 
-  /* 11680 */    IV,    IV,    IV,    IV,    IV,    IV,    IV,    IV,    IV,    IV,     B,     B,     B,     B,     B,     B,
+  /* 11680 */     B,     B,     B,     B,     B,     B,     B,     B,     B,     B,     B,     B,     B,     B,     B,     B,
   /* 11690 */     B,     B,     B,     B,     B,     B,     B,     B,     B,     B,     B,     B,     B,     B,     B,     B,
   /* 116A0 */     B,     B,     B,     B,     B,     B,     B,     B,     B,     B,     B, VMAbv, VMPst,  VAbv,  VPre,  VPst,
   /* 116B0 */  VBlw,  VBlw,  VAbv,  VAbv,  VAbv,  VAbv,     H, CMBlw,     O,     O,     O,     O,     O,     O,     O,     O,
@@ -599,8 +615,29 @@
   /* 11720 */  VPst,  VPst,  VAbv,  VAbv,  VBlw,  VBlw,  VPre,  VAbv,  VBlw,  VAbv,  VAbv,  VAbv,     O,     O,     O,     O,
   /* 11730 */     B,     B,     B,     B,     B,     B,     B,     B,     B,     B,     B,     B,     O,     O,     O,     O,
 
-}; /* Table items: 4816; occupancy: 72% */
+#define use_offset_0x11c00u 4960
 
+
+  /* Bhaiksuki */
+
+  /* 11C00 */     B,     B,     B,     B,     B,     B,     B,     B,     B,     O,     B,     B,     B,     B,     B,     B,
+  /* 11C10 */     B,     B,     B,     B,     B,     B,     B,     B,     B,     B,     B,     B,     B,     B,     B,     B,
+  /* 11C20 */     B,     B,     B,     B,     B,     B,     B,     B,     B,     B,     B,     B,     B,     B,     B,  VPst,
+  /* 11C30 */  VAbv,  VAbv,  VBlw,  VBlw,  VBlw,  VBlw,  VBlw,     O,  VAbv,  VAbv,  VAbv,  VAbv, VMAbv, VMAbv, VMPst,     H,
+  /* 11C40 */     B,     O,     O,     O,     O,     O,     O,     O,     O,     O,     O,     O,     O,     O,     O,     O,
+  /* 11C50 */     B,     B,     B,     B,     B,     B,     B,     B,     B,     B,     B,     B,     B,     B,     B,     B,
+  /* 11C60 */     B,     B,     B,     B,     B,     B,     B,     B,     B,     B,     B,     B,     B,     O,     O,     O,
+
+  /* Marchen */
+
+  /* 11C70 */     O,     O,     B,     B,     B,     B,     B,     B,     B,     B,     B,     B,     B,     B,     B,     B,
+  /* 11C80 */     B,     B,     B,     B,     B,     B,     B,     B,     B,     B,     B,     B,     B,     B,     B,     B,
+  /* 11C90 */     O,     O,   SUB,   SUB,   SUB,   SUB,   SUB,   SUB,   SUB,   SUB,   SUB,   SUB,   SUB,   SUB,   SUB,   SUB,
+  /* 11CA0 */   SUB,   SUB,   SUB,   SUB,   SUB,   SUB,   SUB,   SUB,     O,   SUB,   SUB,   SUB,   SUB,   SUB,   SUB,   SUB,
+  /* 11CB0 */  VBlw,  VPre,  VBlw,  VAbv,  VPst, VMAbv, VMAbv,     O,
+
+}; /* Table items: 5144; occupancy: 72% */
+
 USE_TABLE_ELEMENT_TYPE
 hb_use_get_categories (hb_codepoint_t u)
 {
@@ -619,6 +656,7 @@
       if (hb_in_range (u, 0x1900u, 0x1A9Fu)) return use_table[u - 0x1900u + use_offset_0x1900u];
       if (hb_in_range (u, 0x1B00u, 0x1C4Fu)) return use_table[u - 0x1B00u + use_offset_0x1b00u];
       if (hb_in_range (u, 0x1CD0u, 0x1CFFu)) return use_table[u - 0x1CD0u + use_offset_0x1cd0u];
+      if (hb_in_range (u, 0x1DF8u, 0x1DFFu)) return use_table[u - 0x1DF8u + use_offset_0x1df8u];
       break;
 
     case 0x2u:
@@ -642,10 +680,11 @@
 
     case 0x11u:
       if (hb_in_range (u, 0x11000u, 0x110BFu)) return use_table[u - 0x11000u + use_offset_0x11000u];
-      if (hb_in_range (u, 0x11100u, 0x11237u)) return use_table[u - 0x11100u + use_offset_0x11100u];
+      if (hb_in_range (u, 0x11100u, 0x1123Fu)) return use_table[u - 0x11100u + use_offset_0x11100u];
       if (hb_in_range (u, 0x11280u, 0x11377u)) return use_table[u - 0x11280u + use_offset_0x11280u];
-      if (hb_in_range (u, 0x11480u, 0x114DFu)) return use_table[u - 0x11480u + use_offset_0x11480u];
+      if (hb_in_range (u, 0x11400u, 0x114DFu)) return use_table[u - 0x11400u + use_offset_0x11400u];
       if (hb_in_range (u, 0x11580u, 0x1173Fu)) return use_table[u - 0x11580u + use_offset_0x11580u];
+      if (hb_in_range (u, 0x11C00u, 0x11CB7u)) return use_table[u - 0x11C00u + use_offset_0x11c00u];
       if (unlikely (u == 0x1107Fu)) return HN;
       break;
 
@@ -662,7 +701,6 @@
 #undef H
 #undef HN
 #undef IND
-#undef IV
 #undef N
 #undef O
 #undef R

Modified: trunk/Build/source/libs/harfbuzz/harfbuzz-src/src/hb-ot-shape-complex-use.cc
===================================================================
--- trunk/Build/source/libs/harfbuzz/harfbuzz-src/src/hb-ot-shape-complex-use.cc	2016-07-21 23:20:53 UTC (rev 41747)
+++ trunk/Build/source/libs/harfbuzz/harfbuzz-src/src/hb-ot-shape-complex-use.cc	2016-07-21 23:35:31 UTC (rev 41748)
@@ -184,6 +184,9 @@
     case HB_SCRIPT_MANICHAEAN:
     case HB_SCRIPT_PSALTER_PAHLAVI:
 
+    /* Unicode-9.0 additions */
+    case HB_SCRIPT_ADLAM:
+
       return true;
 
     default:
@@ -227,12 +230,12 @@
 enum syllable_type_t {
   independent_cluster,
   virama_terminated_cluster,
-  consonant_cluster,
-  vowel_cluster,
+  standard_cluster,
   number_joiner_terminated_cluster,
   numeral_cluster,
   symbol_cluster,
   broken_cluster,
+  non_cluster,
 };
 
 #include "hb-ot-shape-complex-use-machine.hh"
@@ -312,13 +315,13 @@
     {
       case independent_cluster:
       case symbol_cluster:
+      case non_cluster:
 	/* These don't join.  Nothing to do. */
 	last_form = _NONE;
 	break;
 
       case virama_terminated_cluster:
-      case consonant_cluster:
-      case vowel_cluster:
+      case standard_cluster:
       case number_joiner_terminated_cluster:
       case numeral_cluster:
       case broken_cluster:
@@ -421,8 +424,7 @@
   /* Only a few syllable types need reordering. */
   if (unlikely (!(FLAG_SAFE (syllable_type) &
 		  (FLAG (virama_terminated_cluster) |
-		   FLAG (consonant_cluster) |
-		   FLAG (vowel_cluster) |
+		   FLAG (standard_cluster) |
 		   FLAG (broken_cluster) |
 		   0))))
     return;
@@ -429,7 +431,7 @@
 
   hb_glyph_info_t *info = buffer->info;
 
-#define BASE_FLAGS (FLAG (USE_B) | FLAG (USE_GB) | FLAG (USE_IV))
+#define BASE_FLAGS (FLAG (USE_B) | FLAG (USE_GB))
 
   /* Move things forward. */
   if (info[start].use_category() == USE_R && end - start > 1)

Modified: trunk/Build/source/libs/harfbuzz/harfbuzz-src/src/hb-private.hh
===================================================================
--- trunk/Build/source/libs/harfbuzz/harfbuzz-src/src/hb-private.hh	2016-07-21 23:20:53 UTC (rev 41747)
+++ trunk/Build/source/libs/harfbuzz/harfbuzz-src/src/hb-private.hh	2016-07-21 23:35:31 UTC (rev 41748)
@@ -83,7 +83,7 @@
 #define unlikely(expr) (expr)
 #endif
 
-#ifndef __GNUC__
+#if !defined(__GNUC__) && !defined(__clang__)
 #undef __attribute__
 #define __attribute__(x)
 #endif

Modified: trunk/Build/source/libs/harfbuzz/harfbuzz-src/src/hb-shape.cc
===================================================================
--- trunk/Build/source/libs/harfbuzz/harfbuzz-src/src/hb-shape.cc	2016-07-21 23:20:53 UTC (rev 41747)
+++ trunk/Build/source/libs/harfbuzz/harfbuzz-src/src/hb-shape.cc	2016-07-21 23:35:31 UTC (rev 41748)
@@ -394,8 +394,6 @@
  * positioned glyphs. If @features is not %NULL, it will be used to control the
  * features applied during shaping.
  *
- * Return value: %FALSE if all shapers failed, %TRUE otherwise
- *
  * Since: 0.9.2
  **/
 void

Modified: trunk/Build/source/libs/harfbuzz/harfbuzz-src/src/hb-ucdn.cc
===================================================================
--- trunk/Build/source/libs/harfbuzz/harfbuzz-src/src/hb-ucdn.cc	2016-07-21 23:20:53 UTC (rev 41747)
+++ trunk/Build/source/libs/harfbuzz/harfbuzz-src/src/hb-ucdn.cc	2016-07-21 23:35:31 UTC (rev 41748)
@@ -154,6 +154,12 @@
     HB_SCRIPT_MULTANI,
     HB_SCRIPT_OLD_HUNGARIAN,
     HB_SCRIPT_SIGNWRITING,
+    HB_SCRIPT_ADLAM,
+    HB_SCRIPT_BHAIKSUKI,
+    HB_SCRIPT_MARCHEN,
+    HB_SCRIPT_NEWA,
+    HB_SCRIPT_OSAGE,
+    HB_SCRIPT_TANGUT,
 };
 
 static hb_unicode_combining_class_t

Modified: trunk/Build/source/libs/harfbuzz/harfbuzz-src/src/hb-unicode-private.hh
===================================================================
--- trunk/Build/source/libs/harfbuzz/harfbuzz-src/src/hb-unicode-private.hh	2016-07-21 23:20:53 UTC (rev 41747)
+++ trunk/Build/source/libs/harfbuzz/harfbuzz-src/src/hb-unicode-private.hh	2016-07-21 23:35:31 UTC (rev 41748)
@@ -182,8 +182,8 @@
 	case 0x17: return hb_in_range (ch, 0x17B4u, 0x17B5u);
 	case 0x18: return hb_in_range (ch, 0x180Bu, 0x180Eu);
 	case 0x20: return hb_in_ranges (ch, 0x200Bu, 0x200Fu,
-							    0x202Au, 0x202Eu,
-							    0x2060u, 0x206Fu);
+					    0x202Au, 0x202Eu,
+					    0x2060u, 0x206Fu);
 	case 0xFE: return hb_in_range (ch, 0xFE00u, 0xFE0Fu) || ch == 0xFEFFu;
 	case 0xFF: return hb_in_range (ch, 0xFFF0u, 0xFFF8u);
 	default: return false;

Modified: trunk/Build/source/libs/harfbuzz/harfbuzz-src/src/hb-unicode.h
===================================================================
--- trunk/Build/source/libs/harfbuzz/harfbuzz-src/src/hb-unicode.h	2016-07-21 23:20:53 UTC (rev 41747)
+++ trunk/Build/source/libs/harfbuzz/harfbuzz-src/src/hb-unicode.h	2016-07-21 23:35:31 UTC (rev 41748)
@@ -449,11 +449,6 @@
 hb_unicode_script (hb_unicode_funcs_t *ufuncs,
 		   hb_codepoint_t unicode);
 
-/**
- * hb_unicode_compose:
- *
- * Since: 0.9.2
- **/
 HB_EXTERN hb_bool_t
 hb_unicode_compose (hb_unicode_funcs_t *ufuncs,
 		    hb_codepoint_t      a,
@@ -460,11 +455,6 @@
 		    hb_codepoint_t      b,
 		    hb_codepoint_t     *ab);
 
-/**
- * hb_unicode_decompose:
- *
- * Since: 0.9.2
- **/
 HB_EXTERN hb_bool_t
 hb_unicode_decompose (hb_unicode_funcs_t *ufuncs,
 		      hb_codepoint_t      ab,
@@ -471,11 +461,6 @@
 		      hb_codepoint_t     *a,
 		      hb_codepoint_t     *b);
 
-/**
- * hb_unicode_decompose_compatibility:
- *
- * Since: 0.9.2
- **/
 HB_EXTERN unsigned int
 hb_unicode_decompose_compatibility (hb_unicode_funcs_t *ufuncs,
 				    hb_codepoint_t      u,

Modified: trunk/Build/source/libs/harfbuzz/version.ac
===================================================================
--- trunk/Build/source/libs/harfbuzz/version.ac	2016-07-21 23:20:53 UTC (rev 41747)
+++ trunk/Build/source/libs/harfbuzz/version.ac	2016-07-21 23:35:31 UTC (rev 41748)
@@ -8,4 +8,4 @@
 dnl --------------------------------------------------------
 dnl
 dnl  m4-include this file to define the current harfbuzz version
-m4_define([harfbuzz_version], [1.2.7])
+m4_define([harfbuzz_version], [1.3.0])



More information about the tex-live-commits mailing list